2013-05-21 30 views
2

所以我有一个通过jquery-ujs呈现视图的rails应用程序。 (数据用遥控器的URL,然后用喜欢的东西的js.erb文件加载:jQuery .on()不能与jquery-ujs一起使用

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

我主要的JS文件,我的事件处理程序,如下所示:

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

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

这是用jQuery 1.9.1和Rails 3 .2.13 btw。

回答

4

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

查看'Direct and delegated events'部分in jQuery's API documentation for .on

这应该工作:

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

啊哈!就是那个!非常感激 :-) – BaronVonKaneHoffen

1

由于#whatever似乎是静态的(始终存在),你可以委托处理它..

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

假设.action元素加入#whatever元素内


请参阅http://api.jquery.com/on/#direct-and-delegated-events了解更多关于授权事件

相关问题