0

可能重复:
jquery:on vs live

我的代码使用$('thing').live("mousemove", function(e) {and可以正常工作$('thing').live({mouseenter:function(e) {。我注意到 jquery 说live已贬值并使用on,所以我这样做了。然而,它似乎并没有像我期望的那样工作。我有 mousemove 事件,但由于对象是动态加载的,因此事件没有触发,这就是我使用 live 的原因。现在 live 完美运行,但是当我on按照 jquery 建议使用时,它的行为似乎像 .mousemove 等。它适用于执行代码时存在的对象,而不适用于动态添加的事件(我使用 live 的全部原因)。

有没有办法告诉他们像现场直播并在新对象上添加事件?还是我用直播?

4

4 回答 4

4

如果您希望它适用于动态添加的元素,则需要委托您的事件

$(anyStaticParent).on("mousemove", "thing", function() {

     // You code Here
});

anyStaticParent可以是thing.. 的任何父容器。更笼统地说,您始终可以将其设置为body

我也看到这'thing'不是一个特定的元素..

使用'.thing' - 如果类

'#thing' - 如果身份证

于 2012-10-19T22:06:19.883 回答
2

您只需要以.on正确的方式调用$(document).on(event, selector, handler)::

// Use an element that exist, like document or "body".
$(document).on("mousemove", "thing", function() {
  // Do something here...
});

检查jquery docs中的最后三个示例。

于 2012-10-19T22:04:38.530 回答
1

你必须实现on一点点不同,所以它的行为就像live,将它绑定到文档,选择器作为参数:

$(document).on("mousemove", 'thing', function(e) { ... });
于 2012-10-19T22:05:13.257 回答
1

委托的方式.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提供 a 时,事件处理程序被称为委托。当事件直接发生在绑定元素上时,不会调用处理程序,而只会调用与选择器匹配的后代(内部元素)。jQuery 将事件从事件目标冒泡到附加处理程序的元素(即,从最内到最外的元素),并为沿该路径匹配选择器的任何元素运行处理程序。

于 2012-10-19T22:11:16.910 回答