2010-04-07 492 views
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; 
}