使用方法.attachEvent()
在 IE 中,如何引用调用者对象(触发事件的元素)this
? In normal浏览器,使用.addEventListener
, 变量this
指向元素,而在 IE 中它指向window
object.
我需要它与以下代码一起使用:
var element = //the element, doesn't matter how it is obtained
element.addAnEvent = function(name, funct){
if(element.addEventListener) // Works in NORMAL browsers...
else if(element.attachEvent){
element.attachEvent("on"+name, funct);
//where the value of "this" in funct should point to "element"
}
}
我刚刚编写了该代码,但不是exactly与我的代码相同,但如果它适用于它,那么它也适用于我!
From 这篇怪异模式文章 http://www.quirksmode.org/js/events_advanced.html#link6关于attachEvent
:
- 事件总是冒泡,没有捕获的可能性。
- 事件处理函数是引用的,不是复制的,所以 this 关键字总是指窗口并且完全没有用.
这两个弱点的结果是,当事件冒泡时,不可能知道当前哪个 HTML 元素处理该事件。我在事件顺序页面上更全面地解释了这个问题。
由于 Microsoft 事件添加模型仅受 Windows 上的 Explorer 5 及更高版本支持,因此它不能用于跨浏览器脚本。但即使对于仅在 Windows 上使用资源管理器的应用程序,也最好不要使用它,因为在复杂的应用程序中,冒泡问题可能非常严重。
我还没有测试过它,但一个可能的解决方法可能是将处理程序包装在一个匿名函数中,该函数通过调用您的处理程序funct.call()
.
else if(element.attachEvent){
element.attachEvent("on"+name, function(){ funct.call( element ) });
}
对于未经测试的解决方案,我深表歉意。我不喜欢这样做,但现在无法轻松访问 IE。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)