jQuery .on()不使用jquery-ujs

时间:2013-05-21 08:05:29

标签: ruby-on-rails jquery ruby-on-rails-3.2

所以我有一个rails应用程序通过jquery-ujs呈现视图。 (URL中的数据远程,然后加载js.erb文件,例如:

$('#whatever').html('<%= j render("form") %>');

在我的主JS文件中,我有像这样的事件处理程序:

$('.action').on('click', function() {
    console.log("clicked");
});

但on()行为不会附加到jquery-ujs插入的新元素。我可以进入控制台并粘贴上面的代码,一切都很好(一旦元素已经存在),但直接在ujs开火后,没有运气。这是一个错误还是我做错了什么?

这是jQuery 1.9.1和Rails 3.2.13 btw。

2 个答案:

答案 0 :(得分:4)

您需要将on绑定到document之类的父级。现在,您直接绑定到.action元素,这与使用$('.action').click()基本相同。因为稍后要向DOM添加元素,所以需要将处理程序委托给插入元素之前已经存在的东西。您可以提供一个选择器作为.on事件的第二个参数,以将其绑定到.action

查看“直接和委派活动”部分in jQuery's API documentation for .on

这应该有效:

$(document).on('click', '.action', function () {
    console.log('Clicked!');
});

答案 1 :(得分:1)

由于#whatever似乎是静态的(一直存在),您可以将处理委托给它。

$('#whatever').on('click','.action', function(e){
    console.log("clicked");
});

假设在.action元素中添加了#whatever元素)


有关委派活动的更多信息,请参阅http://api.jquery.com/on/#direct-and-delegated-events