IE事件回调对象JavaScript



可能的重复:
如何使用attachEvent 引用调用方对象("this")

这不是完全重复的。请看下面我的答案,与假设的副本相比

我可能偏离了我的术语,所以请随时纠正我。也许这就是为什么我似乎找不到任何相关的东西。没有库,

我有一个事件处理程序,它调用一个回调函数。很想,对吧?在IE<9处理程序中的CCD_ 1对象是窗口。我不知道为什么,也不知道如何访问正确的对象。

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提供如何使用attachEvent引用调用方对象("this")非常接近。然而,仍然存在两个问题。

1) 我需要得到调用此函数的event objectDOM element

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

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

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

就是这样!回调接收作为event objecte和作为激发侦听器(不一定是事件目标)的this1的element

然后在回调中:

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

按照链接中的建议,尝试使用匿名函数和.call,使callback()中的this变成了event object,但没有成功。

我投票决定结束这个,但似乎你错过了争论,所以像这个

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

相关内容

  • 没有找到相关文章

最新更新