IE事件回调对象JavaScript

时间:2012-11-20 15:50:44

标签: javascript internet-explorer event-handling callback

  

可能重复:
  How to reference the caller object (“this”) using attachEvent

这不完全相同。请参阅下面的答案与假设的副本相比!

我可能会对我的术语不以为然,所以请随时纠正我。也许这就是为什么我似乎找不到任何相关的东西。没有图书馆,

我有一个事件处理程序,它调用一个回调函数。好吗,对吗?在IE< 9中,处理程序中的this对象是窗口。我不知道为什么,或者如何访问正确的对象。

if (document.addEventListener){
    element.addEventListener(event, callback, false);
} else {
    element.attachEvent('on' +event, callback);
}

这部分工作

这部分不是:

function callback(event){
    console.log(this);
}
IE中的

this返回[object Window],而它返回在每个其他浏览器中调用callback函数的元素。这可以从我的完整脚本中显着减少,但这应该是所有相关的内容。

修改

此链接由@metadings提供 How to reference the caller object ("this") using attachEvent非常接近。但是,仍有两个问题。

1)我需要同时调用此函数event objectDOM element

2)此事件处理委托样式:可能有子DOM元素触发事件,意味着event.target不一定(在我的情况下,通常不是)具有侦听器的元素。

2 个答案:

答案 0 :(得分:1)

好吧,关闭是正确的方法。以下是上述场景的答案:

(function(element, event){
    element.attachEvent(
        'on' + event, 
        function(e){
            callback(e, element);
        }
    );
})(element, event);

就是这样!回调接收e作为event objectelement作为发出监听器的DOM object(不一定是事件目标)。

然后在回调中:

function callback(event, obj){
    obj = obj || this;
    console.log(event, obj);
}

尝试使用匿名函数和.call,如链接中所示,在this callback() event object内{{1}}进行了操作。

答案 1 :(得分:0)

我投票决定关闭这个,但似乎你错过了这些论点,所以像这样

element.attachEvent("on"+event, function(){ callback.apply( element, arguments ); });