代码之家  ›  专栏  ›  技术社区  ›  FK82

是否有针对返回值为addEventListener回调的解决方案?

  •  3
  • FK82  · 技术社区  · 14 年前

    我目前正在尝试自定义(2级DOM)事件,现在我发现了一个问题 addEventListener() 不会接受返回值的回调——或者至少我不熟悉正确的方法。

    基本上我想要的是:

        addEventListener("customEvent",
            function() {
                return true ;
             },
        false) ;
    

    如果我创建一个包装函数的实例 new wrapper() ,

         function wrapper() {
             addEventListener(...) ;
         }
    

    这将正确返回, true 每当事件被触发和捕获时。

    请记住这是实验性的:我知道有很多解决方案不需要从 addEventListener 方法。我只是好奇是否有工作,或者这实际上是一个死胡同,我不应该麻烦。

    谢谢你的帮助!

    1 回复  |  直到 9 年前
        1
  •  2
  •   Moshe Katz    9 年前

    AddEventListener按规范不返回值,也不会返回值。如果AddEventListener要返回一个值,那么它将是无用的,因为触发回调函数的事件将获取返回值,而不是仅注册它的AddEventListener。

    addEventListener( 'onload', function() {
    
      // do something
    
      return true;
    
      // bool(true) would be returned to window.event[onload] and not to addEventListener if that were the case which would still make it useless to you.
    
    }, false );
    

    这么说,有一个肮脏的方法,但它应该得到你想要的。

    var eventTracker = {
    
      retVal: false,
    
      retEvt: false,
    
      trigger: function( e ) {
    
        e = e || window.event;
    
        // some code here
      }
    
    };
    
    function someFn(e) {
    
      e = e || window.event;
    
      // Some code here
    
      eventTracker.retVal = true;
    
      eventTracker.retEvt = e.type;
    
      eventTracker.trigger.call( e );
    
    }
    
    // Bind the event in all browsers
    if ( window.addEventListener ) {
        window.addEventListener( 'load', someFn, false );
    } else if ( window.attachEvent ) {
        window.attachEvent( 'onload', someFn );
    } else {
        window.onload = someFn;
    }