2013-08-02 36 views
3

为什么KEYUP模糊函数

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

似乎工作,但

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

不?我把它们都放在我准备好的功能中,而上面的那个工作,下面的那个不工作。这是在我的previous question的背景下。

+0

检查#my_selector,也许它写得不好? –

+0

当你说你的'准备好'功能,你附加了什么对象?代码在哪里? –

+0

它适用于我http://jsfiddle.net/mDaCr/ –

回答

1

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

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

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

另一方面,$(document)始终可用,您可以随时附加事件处理程序。
$(document).on('event', 'selector', function() { ... })将事件处理程序附加到文档并通过'selector'对其进行过滤。因此,这与以前版本的jQuery中的$().live()一样,您应该以这种方式使用事件绑定。

+0

这就解释了。我的东西只是动态生成的。 –

3

如果#my_selector项是动态添加(Ajax调用结束后例如),然后在DOM中存在元件之前可以被附接direct事件处理程序。在这种情况下,事件处理程序将被附加到任何东西。第一个附加了一个delegated事件处理程序,因此当元素出现在DOM中时并不重要,事件处理程序将被执行。