3

为什么

$(document).on("keyup blur", "#my_selector", function() {
    //DO SOMETHING
});

似乎工作,但是

$("#my_selector").on("keyup blur", function() {
    //DO SOMETHING
});

不是吗?我把它们都放在了我准备好的函数中,虽然上面的一个有效,但下面的无效。这是在我之前的问题的背景下。

4

2 回答 2

3

如果#my_selector项目是动态添加的(例如,在 Ajax 调用完成之后),那么您可能会direct在元素存在于 DOM 之前附加事件处理程序。在这种情况下,事件处理程序将不附加任何内容。第一个附加了一个delegated事件处理程序,因此无论何时元素出现在 DOM 中,事件处理程序都会被执行。

于 2013-08-02T11:51:53.107 回答
1

$('selector').on('event')像 $.bind 一样工作。
$(document).on('event', 'selector')像 $.live 一样工作。

换句话说,$('selector').on将事件处理程序附加到当前存在的节点

如果$('#my_selector')在创建事件处理程序时为空,则事件处理程序将不会附加到它。

另一方面$(document),它始终可用,并且您始终可以将事件处理程序附加到它。
$(document).on('event', 'selector', function() { ... })将事件处理程序附加到文档并通过“选择器”对其进行过滤。所以这就像$().live()以前版本的 jQuery 一样工作,你应该以这种方式使用事件绑定。

于 2013-08-02T11:56:07.180 回答