3

我目前正在试验自定义(第2级DOM)事件,现在我已经到了addEventListener()不会接受返回值的回调 - 至少我不熟悉正确的方法。是否有解决返回值的addEventListener回调?

基本上我想是这样的:

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

所以,如果我创建一个包装功能new wrapper()的一个实例,

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

这将正确地返回,true每当触发事件和抓住。

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

感谢您的帮助!

+0

这是不可能的。 – Strelok 2010-04-07 12:17:47

+0

谨慎阐述?渔获何处? – FK82 2010-04-07 12:42:08

回答

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; 
}