我正在使用纯WinJS作为一个项目(没有jQuery)并且遇到了让我难过的要求。
假设我有一个名为'bob'的DOM元素(尽管这可能不一定是DOM元素)。要附加事件监听器,我会这样做:
bob.addEventListener('click', function ()
{
// Some code goes here
});
没有什么可以阻止我向'bob'添加大量的事件监听器,即使对于相同的事件名称(这很好,因为它们只是排队) - 这就好了!
我需要能够枚举附加到给定对象的事件/侦听器,以便我可以在运行时选择性地替换或调整其中的一些。
关于如何实现这一点的任何想法?
答案 0 :(得分:2)
无法枚举使用addEventListener添加的事件。不推荐你添加活动的方式(至少我是:)。您正在使用addEventListener,但随后使用匿名方法。如果你这样做,那么你将永远无法删除该事件,因为你没有它的句柄。我建议创建你的函数然后分配命名函数(myelement.addEventListener("event", myfunction)
)。每次向元素添加事件时,只需将其添加到集合(一个悬挂在元素本身上的数组),然后您就可以获得事件列表。
答案 1 :(得分:0)
事实证明,在某些情况下,您可以枚举附加的事件侦听器。
如果你在一个对象上使用'Events'Mixin,那么一旦你调用了一个混合方法(addEventListener,removeEventListener或dispatchEvent),你的目标对象将获得一个名为_listeners的属性(假设它没有'已存在)。
对于一个实际示例,这是一个函数,它计算使用此mixin的对象的附加事件侦听器的数量:
/*
* Counts the number of attached listeners
*/
countListeners: function()
{
var count = 0;
if (this._listeners)
{
var key;
for (key in this._listeners)
{
if (this._listeners.hasOwnProperty(key))
{
count++;
}
}
}
return count;
}
希望这有助于某人!