代码之家  ›  专栏  ›  技术社区  ›  Mohammed H

如果事件至少调度一次,则立即执行事件侦听器代码

  •  -2
  • Mohammed H  · 技术社区  · 8 年前
    // Event listener registered before event dispatched.
    document.addEventListener('myappready', function (e) {
     console.log("I am always on time :) ");
    });
    
    // Dispatch the event.
    document.dispatchEvent(new Event('myappready'));
    
    // Event listener registered after event dispatched.
    document.addEventListener('myappready',  function() {
       console.log("I am always late :( ");
    });
    

    它提供输出:

    I am always on time :)
    

    但我想要输出:

    I am always on time :)
    I am always late :(
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Keith    8 年前

    您可以通过为AddEventListener实现一个包装器来做到这一点,然后跟踪事件是否已经被激发,如果已经激发了,就立即调用回调。

    如。

    function myAppReady(cb) {
      if (!myAppReady.ready) {
        document.addEventListener('myappready',function () {
          myAppReady.ready = true;
          cb();
        });
      } else cb();
    }
    myAppReady.ready = false;
    
    
    // On time..
    myAppReady(function () {
      console.log("I am always on time :) ");
    });
    
    // Dispatch the event.
    document.dispatchEvent(new Event('myappready'));
    
    // Event listener registered after event dispatched.
    myAppReady(function() {
       console.log("I am always late :( ");
    });