使用jQuery.on()将事件附加到空数组

时间:2012-10-25 15:32:05

标签: javascript javascript-events jquery jquery-on

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

您可以使用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();​

Heres a fiddle暗示你不能。但为什么不呢?我会假设数组是委托对象吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

你可以,但是jQuery并没有神奇地为你合成触发方法。

people.trigger("murder");

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

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

对象与碰巧包含对它的引用的任何数组之间没有确定的关系。您可以扩展您的API,以便您的“人员”对象可以知道发送事件的位置。

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