`

attachEvent 中this指向

阅读更多

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也一样,可以通过上面方法实现。

1
0
分享到:
评论

相关推荐

    解决使用attachEvent函数时,this指向被绑定的元素的问题的方法

    ### 解决使用attachEvent函数时,this指向被绑定的元素的问题的方法 在Web开发中,尤其是在处理Internet Explorer(IE)浏览器兼容性问题时,我们经常会遇到`attachEvent`函数中的`this`指向问题。默认情况下,`...

    addEventListener和attachEvent二者绑定的执行函数中的this不相同

    2. **`attachEvent`**: 与`addEventListener`不同,`attachEvent`在IE中执行事件处理函数时,`this`会指向绑定事件的元素,通常是全局对象`window`。当点击`test1`时,所有浏览器的行为一致,因为`onclick`属性直接...

    如何解决attachEvent函数时,this指向被绑定的元素的问题?

    然而,与W3C标准的`addEventListener`不同,`attachEvent`的一个显著问题是:在事件处理函数内部,`this`关键字并不指向触发事件的元素,而是指向全局对象(通常是`window`)。这在进行事件处理时可能会引发问题,...

    如何使用Javascript中的this关键字

    在IE浏览器中,使用`attachEvent`方法绑定事件,`this`会指向`window`。而在DOM标准的`addEventListener`中,`this`会指向事件绑定的目标元素。 1. `attachEvent`示例: ```javascript var div1 = document....

    讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别

    // 这里,this指向gorush对象 document.onclick = function() { alert(this === document); // true,因为事件监听器是添加到document上的 } ``` 然而,当函数作为回调或匿名函数使用时,`this`的指向可能会发生...

    JavaScript中的this实例分析

    因此,在JavaScript中,函数内部的this指向谁,并不是由函数自身决定,而是由函数被调用的方式决定的。 Demo2通过new操作符创建函数a的实例,展示了this在构造函数中的指向。使用new操作符创建对象时,构造函数内的...

    JavaScript通过attachEvent和detachEvent方法处理带参数的函数

    这是因为attachEvent在绑定事件时会把事件处理函数中的this上下文指向全局对象window,而不是事件触发的那个DOM元素。 处理带参数的函数时,我们通常需要通过创建一个闭包(或者使用匿名函数包装器)来确保事件处理...

    js中this的用法实例分析

    实例4说明了在不同的浏览器中,如何使用addEventListener和attachEvent来添加事件监听器,并通过call方法设置正确的this指向。 ```html window.onload = function() { var hi = document.getElementById('hi');...

    attachEvent的使用方法与传递参数[IE|firefox]|angluo-javascript-37392.pdf

    在`attachEvent`中,事件处理函数的执行上下文(即`this`的值)会指向调用`attachEvent`的元素,而不是像`addEventListener`那样默认指向事件的目标元素。此外,`attachEvent`的第二个参数是一个函数,该函数通常...

    JAVASCRIPT THIS详解 面向对象

    然而,在旧版IE浏览器中,使用`attachEvent`时`this`指向`window`对象,这是因为`attachEvent`是作为全局函数而非方法调用的。为了在所有浏览器中保持一致性,可以使用`event.srcElement`来代替`this`获取触发事件的...

    JavaScript 45 道面试题及答案.docx

    This 总是指向函数的直接调用者(而非间接调用者),如果有 new 关键字,this 指向 new 出来的那个对象,在事件中,this 指向触发这个事件的对象,特殊的是,IE 中的 attachEvent 中的 this 总是指向全局对象 Window...

    JavaScript基础面试题_62题.pdf_前端面试题

    在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window。 六、事件模型的理解 W3C中定义事件的发生经历三个阶段:捕获阶段、目标阶段和冒泡阶段。冒泡型事件:当你...

Global site tag (gtag.js) - Google Analytics