可能重复:
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 object
和DOM element
。
2)此事件处理委托样式:可能有子DOM元素触发事件,意味着event.target
不一定(在我的情况下,通常不是)具有侦听器的元素。
答案 0 :(得分:1)
好吧,关闭是正确的方法。以下是上述场景的答案:
(function(element, event){
element.attachEvent(
'on' + event,
function(e){
callback(e, element);
}
);
})(element, event);
就是这样!回调接收e
作为event object
和element
作为发出监听器的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 ); });