1

我在一个项目中使用纯 WinJS(没有 jQuery)并且遇到了一个让我难过的要求。

假设我有一个名为“bob”的 DOM 元素(尽管这可能不一定是 DOM 元素)。要附加事件侦听器,我会这样做:

bob.addEventListener('click', function ()
{
  // Some code goes here
});

没有什么能阻止我向“bob”添加大量事件侦听器,即使对于相同的事件名称(这很好,因为它们只是排队) - 这就是问题所在!

我需要能够枚举附加到给定对象的事件/侦听器,以便我可以在运行时选择性地替换或调整其中的一些。

关于如何实现这一目标的任何想法?

4

2 回答 2

2

无法枚举使用 addEventListener 添加的事件。不推荐您添加事件的方式(至少我:)。您正在使用 addEventListener 但随后使用匿名方法。如果您这样做,那么您将永远无法删除该事件,因为您没有处理它。我建议创建您的函数,然后分配命名函数 ( myelement.addEventListener("event", myfunction))。每次将事件添加到元素时,只需将其添加到集合(悬挂在元素本身的数组),然后您将获得事件列表。

于 2012-12-25T15:14:51.133 回答
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;
 }

希望这对某人有帮助!

G

于 2013-01-11T19:14:29.853 回答