关于JavaScript中的事件绑定,有些疑惑~
问题描述:
[code="html"]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
bind by a
bind by b
function func(t1){ var bt = document.getElementById('button'); bt.addEventListener('click',b,false); function b(){ alert(t1); } }
[/code]
为什么多次点击bind by a或bind by b之后,再点击id为button的input,会出现多个alert窗口?
重复绑定同一事件不是应该只算绑定一次吗?
答
也就是说,每次绑定的b函数是不同的?
因为按标准来说,addEventListener多次绑定同一事件的同一函数,后面的绑定将覆盖前面的。
b函数是你在func函数内创建的闭包. 每次调用func都会重新创建一个b函数
如果把b函数挪出func之外则不会发生此种情况,
答
[code="js"]
addEventListener/attachEvent的事件绑定,支持同一个事件,多个处理函数。
on + '事件名' 的事件绑定,仅仅支持一个处理函数。后面的绑定将覆盖前面的。
[/code]
答
[code="js"]
因为你每一次都定义了一个b.
把 function b挪到 func 外面试试就知道了。[/code]