我目前正在试验自定义(2 级 DOM)事件,现在我遇到了 addEventListener()
不接受返回值的回调的问题——或者至少我我不熟悉正确的方法。
基本上我想要的是:
addEventListener("customEvent",
function() {
return true ;
},
false) ;
所以如果我创建一个包装函数的实例 new wrapper()
,
function wrapper() {
addEventListener(...) ;
}
每当事件被触发和捕获时,这将正确返回 true
。
请记住这是实验性的:我知道有很多解决方案不需要从 addEventListener
方法返回。我只是好奇是否有解决方法,或者这是否实际上是一个死胡同,我不应该打扰。
最佳答案
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;
}
关于callback - 有返回值的 addEventListener 回调的解决方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2592282/