有什么办法可以解决addEventListener回调有返回值的问题吗?

问题描述 投票:3回答:1

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

基本上我想要的是这样的。

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

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

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

这将适当地返回。true 每当事件被触发并被捕获时,就会被调用。

请记住,这是实验性的:我知道有很多解决方案不需要从一个 addEventListener 方法。我只是想知道是否有变通的办法,或者说这其实是一个死胡同,我不应该去打扰。

callback dom-events return-value addeventlistener
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.