我在处理函数中可以访问事件时遇到一些麻烦...有没有明显的原因或解决方案为什么我的事件对象在我的处理函数中是未定义的?我的结构类似于以下内容:
var example = {
'attachEvent': function ( object, event, handler ) {
if (window.attachEvent) {
object.attachEvent( 'on'+event, function() {
handler(event);
}, false );
} else {
object.addEventListener( event, function() {
handler(event);
}, false );
}
},
'detachEvent': function( object, event, handler ){
if (window.detachEvent) {
object.detachEvent( 'on'+event, function(){
handler(event);
}, false ) ;
} else {
object.removeEventListener( event, function() {
handler(event);
}, false );
}
},
'exampleA' : function(event) {
console.log('example A executed ' + event.type);
},
'exampleB' : function(event) {
console.log('example B executed');
}
}
example.attachEvent(window, 'load', function(event) {
example.exampleA(event);
});
答案 0 :(得分:0)
您没有将事件传递给您的处理程序,请按以下方式更改
if (window.attachEvent) {
object.attachEvent( 'on'+event, function(e) {
handler(e);
}, false );
}
else {
object.addEventListener( event, function(e) {
handler(e);
}, false );
}
答案 1 :(得分:0)
您必须使用apply
:
var example = {
'attachEvent': function ( object, event, handler ) {
if (window.attachEvent) {
object.attachEvent( 'on'+event, function() {
handler.apply(object, arguments);
}, false );
} else {
object.addEventListener( event, function() {
handler.apply(object, arguments);
}, false );
}
},
'detachEvent': function( object, event, handler ){
if (window.detachEvent) {
object.detachEvent( 'on'+event, function(){
handler.apply(object, arguments);
}, false ) ;
} else {
object.removeEventListener( event, function() {
handler.apply(object, arguments);
}, false );
}
},
'exampleA' : function(event) {
alert('example A executed ' + event.type);
},
'exampleB' : function(event) {
alert('example B executed');
}
}
example.attachEvent(window, 'load', function(event) {
example.exampleA(event);
});