是否有一个带有返回值的addEventListener回调的解决方法?

时间:2010-04-07 12:13:15

标签: javascript-events callback return-value addeventlistener

我目前正在尝试自定义(2级DOM)事件,现在我遇到了addEventListener()不接受返回值的回调的问题 - 或者至少我不熟悉适当的方法。

基本上我想要的是:

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

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

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

只要事件被触发并被捕获,这将正确返回true

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

按规范添加AddEventListener不会也不会返回值。如果addEventListener要返回一个值,那么它将是无用的,因为触发callbackFunction的事件将获得返回值而不是仅仅注册它的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;
}