用于设置事件的Javascript对象方法

时间:2015-07-02 11:50:22

标签: javascript

我在处理函数中可以访问事件时遇到一些麻烦...有没有明显的原因或解决方案为什么我的事件对象在我的处理函数中是未定义的?我的结构类似于以下内容:

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

2 个答案:

答案 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);
});