1

另一个我要谋杀巴里的问题。

您可以使用 jQuery 将事件附加到空数组.on()吗?

var barry = new Person();
var steve = new Person();
var paul = new Person();

var people = [];


function Person() {

}

Person.prototype.murder = function() {
    $(this).triggerHandler("murder");
}


/*
    If I apply .on to an empty array the event is never triggered why?
            $(people).on("murder", function(){
       console.log("call the police");
    })

 */

people.push(barry)
people.push(steve)
people.push(paul)

$(people).on("murder", function() {
    console.log("call the police");
})

barry.murder();​

这是一个暗示你不能的小提琴;但为什么不呢?我会假设数组是委托对象?

4

2 回答 2

3

您没有将事件绑定到数组。$在数组上调用函数[a,b,c]$(a).add(b).add(c). 和$([])just 一样$()(一个空的 jQuery 对象)。

于 2012-10-25T15:41:07.050 回答
2

可以,但是 jQuery 不会神奇地为您合成触发方法。

people.trigger("murder");

它也不会触发恰好在数组中的值的事件;没有从数组元素冒泡到包含数组的事件。事件冒泡在 DOM 中起作用,而不是在 JavaScript 数据结构中。

编辑——哦,对不起,我现在看到您已经创建了自己的.murder()API。好吧,但是您仍然遇到事件冒泡的问题。

对象和碰巧包含对它的引用的任何数组之间没有牢固的关系。您可以扩展您的 API,以便您的“Person”对象可以知道将事件发送到哪里。

再次编辑——哦,我现在感觉很蠢——这真的与将数组作为对象没有任何关系。当您将 jQuery 对象包装在数组实例周围时,库会将其解释为将数组元素视为 jQuery 对象成员的请求。因此,当您添加事件处理程序时,数组实际上与它没有任何关系:您将处理程序添加到各个元素。

于 2012-10-25T15:34:55.693 回答