2

所以我有一个通过 jquery-ujs 呈现视图的 rails 应用程序。(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 顺便说一句。

4

2 回答 2

4

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

查看jQuery 的 API 文档中.on的“直接和委托事件”部分。

这应该有效:

$(document).on('click', '.action', function () {
    console.log('Clicked!');
});
于 2013-05-21T08:07:31.470 回答
1

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

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

假设.action元素被添加到#whatever元素内部)


有关委托事件的更多信息,请参见http://api.jquery.com/on/#direct-and-delegated-events

于 2013-05-21T08:09:55.353 回答