jQuery的.delegate()在load和changeData事件上不起作用

5
有人能为我解释一下jQuery delegate是什么,它处理哪些事件和不处理哪些事件。下面的代码不起作用。
$("#browser").delegate( ".photo", {
    "load": function(e) {
        alert("photo loaded");
    }
});

但是以下代码可以正常工作。
$(".photo").load( function(e) {
    alert("photo loaded");
} );

我还尝试将changeData事件委托给一个类,但同样没有起作用。

$("#browser").delegate( ".thumbnail", {
    "changeData": function(e, prop, value) {
        alert( prop + " = " + value );
    }
});

但是以下代码可以工作。
$(".thumbnail").bind( "changeData", function(e, prop, value) {
    alert( prop + " = " + value );
}

到目前为止,你已经得到了两个正确的答案。你正在使用错误的语法,而且不能在这些事件中使用“live”和“delegate”。 - Matt Ball
3个回答

11

注意:

$("#browser").delegate( ".photo", {
    "load": function(e) {
        alert("photo loaded");
    }
});

但是:

$("#browser").delegate( ".photo", "load",
    function(e) {
        alert("photo loaded");
});

你不能在那些事件中使用 live 和 delegate,因为它们不会冒泡。


我将一个带有多个事件:函数()对的对象传递到一个委托中,并且它在1.5.1上为我工作 :) - jhloke
1
好的,虽然文档中没有提到,但这并不意味着它不能工作。无论如何,这些事件不能与live或delegate一起使用。因此,您必须找到另一种方法来实现此目的。例如,在更改时更新事件绑定。 - Aidiakapi

6

这些事件不会冒泡,因此不能与 livedelegate 一起使用。


谢谢。我以为load是一个本地的JavaScript事件,应该会冒泡。你的意思是说,由jQuery API触发的changeData不是自定义事件或者不会冒泡吗?无论如何,我可以在两个事件上都使用delegate吗? - jhloke
我看了一下changeData的jquery代码,并修改了triggerHandler以便它可以冒泡触发。但我怀疑它有时会导致Google Chrome崩溃。 - jhloke

0

对于较新版本的jQuery,优先使用.on()方法而非.delegate().live()方法,但这种方式也行不通。

// wrong
jQuery(selector).on('load', 'img', myFunc)

由于加载事件不会冒泡

将它改成这样

jQuery(selector).find('img').on('load', myFunc)

2
这不是委托。 - Ionică Bizău
这是一个伪装的委托。 - yunzen
3
我认为这不会奏效,因为find('img')只能找到已经添加的图片,而无法找到尚未加载的图片。对吗? - Ionică Bizău

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接