可能的重复:
上
jQuery:在VS Live
我的代码使用$('thing').live("mousemove", function(e) {
和$('thing').live({mouseenter:function(e) {
可以正常工作。我注意到jQuery说live
被折旧并使用on
,所以我做到了。但是,它似乎并没有像我期望的那样奏效。我有Mousemove事件,但是由于对象被动态加载,因此事件无触发,这就是我使用Live的原因。现在,现场正常工作,但是当我使用 on
时,正如jQuery所建议的那样,它的作用似乎是.mousemove等。它在执行代码而不是动态添加的事件时(我使用live的全部原因)时,它可用于存在的对象。
有没有办法告诉像现场直播并在新对象上添加事件?还是我使用现场?
您需要委托您的事件如果您想为动态添加元素工作
$(anyStaticParent).on("mousemove", "thing", function() {
// You code Here
});
任何staticparent 可以是thing
的任何父容器。更通用,您可以随时将其设置为body
我也看到 'thing'
不是特定元素。
使用'.thing'
-如果类
'#thing'
-如果ID
您只需要以正确的方式致电.on
: $(document).on(event, selector, handler)
:
// Use an element that exist, like document or "body".
$(document).on("mousemove", "thing", function() {
// Do something here...
});
检查jQuery文档中的最后三个示例。
您必须实现 on
的小小一点,因此它的行为与 live
一样,将其与选择器绑定到文档作为参数:
$(document).on("mousemove", 'thing', function(e) { ... });
与 .on
委派的方法是在选择器中传递动态添加的元素。
$('thing').on('mousemove', 'dynamically added thing', function(e) {
//handler
});
对于一个不抽象的示例:
$("ul#menu").on("click", "li", function(event){
//handler
});
根据API,http://api.jquery.com/on/:
.on( events [, selector] [, data], handler(eventObject) )
.on( events-map [, selector] [, data] )
如果省略了selector
或为null,则事件处理程序称为直接或直接限制。每次事件发生在选定元素上时,无论是直接发生在元素上还是从后代(内部)元素发生气泡时,都会调用处理程序。
提供了selector
时,事件处理程序称为委派。当事件直接出现在绑定元素上时,而是针对匹配选择器的后代(内部元素)时,没有调用处理程序。jQuery将事件从事件目标燃烧到连接处理程序的元素(即,最内向至最外面的元素),并运行沿该路径匹配选择器的任何元素的处理程序。