事件处理函数的绑定方式问题

事件处理函数分为不带参数和带参数的。不带参数的函数绑定事件时不需要加小括号,而带参数的函数绑定事件时要打包在匿名函数中。
函数名后加小括号才表示函数调用。下面的代码中,showPic函数不带参数,如果打包在匿名函数中绑定点击事件时,this.getAttribute方法成了未定义,这表明this关键字指代的元素节点有问题。如果不打包在匿名函数中绑定事件,则可以用this.getAttribute方法。
为什么会出现这种情况呢?
回答:根据《JavaScript&jQuery交互式Web前端开发》P260页介绍,this关键字指向的是this所在函数的所有者。当不带参数的函数showPic没有打包在匿名函数中时,showPic函数的所有者是发生事件的元素节点。而当showPic函数打包在匿名函数中时,showPic函数的所有者是匿名函数,这时候this指向了匿名函数,当然this.getAttribute方法就会undefined。
因此,用this关键字在函数里指代发生事件的元素节点时,要注意绑定事件的函数一定不要打包在匿名函数里。如果打包在匿名函数里,可以把this作为参数传递到函数中,这时候的this指代的是发生事件的元素节点。比如定义函数function showPic(whichpic){这里是函数体代码;}
元素绑定事件处理函数,打包在匿名函数中
element.onclick = function() {
showPic(this);//这里的this指向发生click事件的元素节点element。
}
function showPic() {
if (!document.getElementById) {
return false;
}else {
var source = this.getAttribute(“href”);
var placeholder = document.getElementById(“placeholder”);
var image_description = this.childNodes[0].nodeValue;
placeholder.setAttribute(“src”,source);
document.getElementById(“image_description”).childNodes[0].nodeValue = image_description;
return false;
}

}
window.onload = function() {
var choosen = document.getElementsByTagName(“a”);
for(var i =0; i < choosen.length; i++){
choosen[i].onclick = function() {
showPic();
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值