84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
// IE Click Me! // 其他浏览器 Click Me!
this的指向不就是调用该函数的对象么,那么按照常规showName当中的this就是指向button对象了,this.name应该弹出'box',为什么IE下弹出的是window,直接调用showName()才应该是'window'啊,这是不是和attachEvent函数绑定函数的方式有关呢?有什么解决方法?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
这个就是IE的attache的实现问题了IE就是这个样子的啦,默认情况下this指向window对象解决方法:
function showName(event){ var _event=window.event||arguments[0]; var _this_=_event.target; alert(_this_); }
或这样也可以
var boxDOM=document.getElementById("box") boxDOM.attachEvent("onclick", function(){ showName.apply(boxDOM,arguments.slice(0)); });
题主,你确定你第二段代码弹出的是box?你再试试。
box
这样:
function showName(){ (function(){ alert(this.name); })(); }
弹出的肯定还是window啊,你应该把那个匿名函数去掉。
window
至于原因是这样的:
attachEvent调用回调函数的时候是这样的:showName();或者showName.call(undefined);
showName();
showName.call(undefined);
addEventListener调用回调函数的时候是这样的:showName.call(sourceElement);
showName.call(sourceElement);
这样你就明白了。
这个就是IE的attache的实现问题了
IE就是这个样子的啦,默认情况下this指向window对象
解决方法:
或这样也可以
题主,你确定你第二段代码弹出的是
box
?你再试试。
这样:
弹出的肯定还是
window
啊,你应该把那个匿名函数去掉。至于原因是这样的:
attachEvent调用回调函数的时候是这样的:
showName();
或者showName.call(undefined);
addEventListener调用回调函数的时候是这样的:
showName.call(sourceElement);
这样你就明白了。