所以我有一个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。
答案 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