IE中使用的事件绑定函数与Web标准的不同,而且this指向也不一样,Web标签中的this指向与传统事件绑定中的this一样,是当前目标,但是IE中事件绑定函数中this指向,通过使用call或apply可以改变this指针的指向。
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>attachEvent 中this指向</title> <script type="text/javascript" src="kingwell.js"></script> <script type="text/javascript"> window.onload = function(){ var test = document.getElementById('test'); test.onclick = function(){ //alert(this);//this指向 h1 } test.attachEvent('onclick',function(){ //alert(this);// this指向window }); test.addEventListener('click',function(){ //alert(this);//this指向 h1 },false); //传统的绑定跟Web标准中this指向是正确的,都是所绑定的那个对象,但IE的总是指向window,这是错误的 //只要稍微调整一个,就可以修正这个错误 var Event = {}; Event.addEvent = function(target,eventType,handle){ if(document.addEventListener){ Event.addEvent = function(target,eventType,handle){ target.addEventListener(eventType,handle,false); } }else if(document.attachEvent){ Event.addEvent = function(target,eventType,handle){ target.attachEvent('on'+eventType,function(){ handle.call(target,arguments);//改变this指向 }); } }else{ Event.addEvent = function(target,eventType,handle){ target['on'+eventType] = handle; } } Event.addEvent (target,eventType,handle) } Event.addEvent(test,'click',function(){ alert('我是正确的,我是:'+this);//现在this指向的是正确的了 }); } </script> </head> <body> <h1 id="test">attachEvent this</h1> </body> </html>
还有detachEvent也一样,可以通过上面方法实现。
相关推荐
### 解决使用attachEvent函数时,this指向被绑定的元素的问题的方法 在Web开发中,尤其是在处理Internet Explorer(IE)浏览器兼容性问题时,我们经常会遇到`attachEvent`函数中的`this`指向问题。默认情况下,`...
2. **`attachEvent`**: 与`addEventListener`不同,`attachEvent`在IE中执行事件处理函数时,`this`会指向绑定事件的元素,通常是全局对象`window`。当点击`test1`时,所有浏览器的行为一致,因为`onclick`属性直接...
然而,与W3C标准的`addEventListener`不同,`attachEvent`的一个显著问题是:在事件处理函数内部,`this`关键字并不指向触发事件的元素,而是指向全局对象(通常是`window`)。这在进行事件处理时可能会引发问题,...
在IE浏览器中,使用`attachEvent`方法绑定事件,`this`会指向`window`。而在DOM标准的`addEventListener`中,`this`会指向事件绑定的目标元素。 1. `attachEvent`示例: ```javascript var div1 = document....
// 这里,this指向gorush对象 document.onclick = function() { alert(this === document); // true,因为事件监听器是添加到document上的 } ``` 然而,当函数作为回调或匿名函数使用时,`this`的指向可能会发生...
因此,在JavaScript中,函数内部的this指向谁,并不是由函数自身决定,而是由函数被调用的方式决定的。 Demo2通过new操作符创建函数a的实例,展示了this在构造函数中的指向。使用new操作符创建对象时,构造函数内的...
这是因为attachEvent在绑定事件时会把事件处理函数中的this上下文指向全局对象window,而不是事件触发的那个DOM元素。 处理带参数的函数时,我们通常需要通过创建一个闭包(或者使用匿名函数包装器)来确保事件处理...
实例4说明了在不同的浏览器中,如何使用addEventListener和attachEvent来添加事件监听器,并通过call方法设置正确的this指向。 ```html window.onload = function() { var hi = document.getElementById('hi');...
在`attachEvent`中,事件处理函数的执行上下文(即`this`的值)会指向调用`attachEvent`的元素,而不是像`addEventListener`那样默认指向事件的目标元素。此外,`attachEvent`的第二个参数是一个函数,该函数通常...
然而,在旧版IE浏览器中,使用`attachEvent`时`this`指向`window`对象,这是因为`attachEvent`是作为全局函数而非方法调用的。为了在所有浏览器中保持一致性,可以使用`event.srcElement`来代替`this`获取触发事件的...
This 总是指向函数的直接调用者(而非间接调用者),如果有 new 关键字,this 指向 new 出来的那个对象,在事件中,this 指向触发这个事件的对象,特殊的是,IE 中的 attachEvent 中的 this 总是指向全局对象 Window...
在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window。 六、事件模型的理解 W3C中定义事件的发生经历三个阶段:捕获阶段、目标阶段和冒泡阶段。冒泡型事件:当你...