关于JavaScript中的事件绑定,有些疑惑~

关于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]