3

可能重复:
如何使用 attachEvent 引用调用者对象(“t​​his”)

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

我的术语可能有点偏离,所以请随时纠正我。也许这就是为什么我似乎找不到任何相关的原因。不要图书馆。

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

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

这部分有效

这部分没有:

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

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

编辑

@metadings 提供的这个链接 How to reference the caller object ("this") using attachEvent非常接近。但是,仍然存在两个问题。

1)我需要同时获取event objectDOM element调用这个函数。

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

4

2 回答 2

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,在 .callthis内部callback()进行event object,但没有成功。

于 2012-11-20T16:57:03.880 回答
0

我投票结束了这个,但似乎你错过了论点,所以像这样

element.attachEvent("on"+event, function(){ callback.apply( element, arguments ); });
于 2012-11-20T16:38:45.407 回答