另一个我谋杀巴里的问题。
您可以使用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暗示你不能。但为什么不呢?我会假设数组是委托对象吗?
答案 0 :(得分:3)
您没有将事件绑定到数组。在数组$
上调用[a,b,c]
函数与$(a).add(b).add(c)
相同。 $([])
与$()
(一个空的jQuery对象)相同。
答案 1 :(得分:2)
你可以,但是jQuery并没有神奇地为你合成触发方法。
people.trigger("murder");
它也无法触发恰好位于数组中的值的事件;没有事件从数组元素冒泡到包含数组。事件冒泡在DOM中起作用,而不是在JavaScript数据结构上起作用。
编辑 - 哦抱歉,我现在看到您已经创建了自己的.murder()
API。好吧,但是你仍然遇到了事件冒泡的问题。
对象与碰巧包含对它的引用的任何数组之间没有确定的关系。您可以扩展您的API,以便您的“人员”对象可以知道发送事件的位置。
再次编辑 - 哦,我现在感到愚蠢 - 这实际上与数组作为对象没有任何关系。当您在数组实例周围包装jQuery对象时,库将其解释为将数组的元素视为jQuery对象成员的请求。因此,当您添加事件处理程序时,该数组实际上与它没有任何关系:您将处理程序添加到各个元素。