JCO*_*611 13 javascript internet-explorer dom this
使用.attachEvent()IE中的方法,如何引用调用者对象(触发事件的元素)this?在普通的浏览器中,使用.addEventListener,var this指向元素,而在IE中它指向window对象.
我需要它来使用以下代码:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
我只是编写了代码,它与我的代码不完全相同,但是如果它与它一起工作则它适用于我!
use*_*716 16
从这篇quirksmode文章关于attachEvent:
- 事件总是冒泡,没有捕获的可能性.
- 引用事件处理函数,而不是复制,因此this关键字始终引用窗口并且完全无用.
这两个弱点的结果是,当事件冒泡时,无法知道哪个HTML元素当前处理事件.我在事件订单页面上更全面地解释了这个问题.
由于Microsoft事件添加模型仅在Windows上由Explorer 5及更高版本支持,因此不能用于跨浏览器脚本.但即使对于仅在Windows上的Explorer应用程序,最好不要使用它,因为在复杂的应用程序中冒泡问题可能非常糟糕.
我还没有对它进行测试,但可能的解决方法可能是将处理程序包装在一个匿名函数中,该函数通过调用处理程序funct.call().
else if(element.attachEvent){
element.attachEvent("on"+name, function(){ funct.call( element ) });
}
Run Code Online (Sandbox Code Playgroud)
对未经测试的解决方案表示歉意.我不喜欢这样做,但现在不能轻易进入IE.
Jus*_*son 10
如果你在IE中,你可以通过访问window.event.srcElement事件处理函数来获得"调用者"对象,就像你调用它一样.此对象通常称为事件目标或源.
var funct = function(event) {
if ( !event ) {
event = window.event;
}
var callerElement = event.target || event.srcElement;
// Do stuff
};
Run Code Online (Sandbox Code Playgroud)
此代码未经测试,但应该将您设置为正确的方向.
| 归档时间: |
|
| 查看次数: |
8785 次 |
| 最近记录: |