Rails, JQuery: событие onClick не присоединяется?

0

Я думаю, что я упускаю какой-то фундаментальный аспект того, как Javascript обрабатывается Rails.

Я создал новый проект Rails с использованием Ruby 2.1.0.

$ mkdir whatishappening
$ cd whatishappening
$ rails new .
$ rails generate scaffold post title body:text
$ rails db:migrate
$ rails server

Затем я приступил к созданию тестового сообщения. После этого я добавил:

whatishappening/приложение/просмотров/сообщений /show.html.erb

<a href="#" id="foo">link</a>

whatishappening/app/assets/javascripts/posts.js (я переименовал это из posts.js.coffee)

console.log("posts.js loaded");

$("#foo").on("click", function(event) {
  console.log("link clicked");
});

Когда я запускаю rails server и контролирую консоль Javascript в Chrome, я вижу:

> posts.js loaded

Однако я не вижу

> link clicked

когда я нажимаю ссылку.

Может кто-нибудь объяснить, что происходит?

2 ответа

1
Лучший ответ

Используя ответ от @Adil и отзыв от @Monk_Code, я нашел следующее: это лучшее решение, учитывая, что установка Rails 4 по умолчанию включает Turbolinks.

приложение/активы/JavaScripts/posts.js

console.log("posts.js loaded");

var ready;
ready = function() {

  $("#foo").on("click", function(event) {
    console.log("link clicked");
  });

};

$(document).ready(ready);
$(document).on("page:load", ready);
2

Вы можете проверить две вещи.

  • Вы успешно добавили jQuery, вы можете найти, как добавить jQuery здесь.

  • Код привязки выполняется при добавлении foo в DOM, вы можете использовать document.ready для обеспечения этого.

    console.log("posts.js loaded");
    
    $(document).ready(function(){
     $("#foo").on("click", function(event) {
        console.log("link clicked");
      });
    });
    
  • 3
    вам нужен $(document).on('page:load', ready) если вы используете turbo-links
  • 0
    @Monk_Code отличный совет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню