【问题标题】:js: trigger function after a bunch of events were calledjs:调用一堆事件后的触发函数
【发布时间】:2014-05-15 13:00:16
【问题描述】:

我需要在一些事件结束时调用一个函数。所以假设我有 9 个点击监听器、10 个更蓝的监听器、一些按键上/下监听器等。

一个解决方案是修改所有并添加函数调用。

但这……嗯……很蹩脚。

我是否可以一次在所有事件(以及任何未来定义的事件)上添加该调用?

也许以某种方式扩展事件?

【问题讨论】:

  • 您能说出您期望的结果吗?听起来像一个XY问题。这些事件处理程序是否绑定到同一个元素,或者例如 9 个单击侦听器用于 9 个不同的元素?任何 jsFiddle?
  • 如果只针对页面上的某些事件处理程序,您如何识别哪些?
  • @A. Wolff 想象一下我想做这样的事情:当一个事件被触发时,我会显示一个警告说“事件 X 被触发”。不论活动。

标签: javascript jquery events dom-events prototype


【解决方案1】:

误解了这个问题。我把这个答案留在这里作为参考,尽管它不会触发所有事件。


我会为此使用承诺。即:使用Q 和事件计数器:

   var deferred = Q.defer();

   ...
   var allEventsRequired = { ev1 : false, ev2: false };
   function tryToResolvePromise() {
       for(var k in allEventsRequired){
           if( !allEventsRequired[k] ) return;
       }
       deferred.resolve();
   }
   ...
   function markEventAsFired(name) { 
         allEventsRequired[name] = true; 
         tryToResolvePromise(); 
   }
   ...

   deferred.promise.then(function() { ... this will trigger when all events got fired ... } );

调用markEventAsFired( name ),从您的每个事件触发的地方。如果您将来需要任何新的,只需将其名称添加到地图allEventsRequired。不要忘记将它们初始化为 false。

【讨论】:

  • 去看看,没用Q b4。 +1 4 帮助 :)。
  • 我认为 OP 试图在 any 事件之后询问如何做某事,而不是等到所有事件都发生后再做某事。
  • 我同意 nnnnn,这是完全不同的事情。
  • 有道理,我会保留这个问题作为参考,但将其标记为误导
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
相关资源
最近更新 更多