Javascript迭代问题
我试图迭代下面的代码,由于某种原因,每次我迭代它时,它都会触发事件处理程序,有人知道为什么它会自动触发事件处理程序吗Javascript迭代问题,javascript,Javascript,我试图迭代下面的代码,由于某种原因,每次我迭代它时,它都会触发事件处理程序,有人知道为什么它会自动触发事件处理程序吗 nmbr = 1; x1 = document.getElementsByClassName('fp')[0] ; slowSkrol = document.createElement('button'); slowSkrol.className = 'mods'; slowSkrol.valu
nmbr = 1;
x1 = document.getElementsByClassName('fp')[0] ;
slowSkrol = document.createElement('button');
slowSkrol.className = 'mods';
slowSkrol.value= nmbr;
x1.appendChild(slowSkrol);
slowSkrol.addEventListener('click', whenclicked(nmbr),false);
function whenclicked(vv){
alert(vv);
}
您正在调用函数,并将其返回值绑定到事件,而不是将函数本身绑定到事件。当勾选(nmbr)时,将其替换为:
function(){ whenclicked(nmbr); }
在现代浏览器中,您还可以使用:
更改:
slowSkrol.addEventListener('click', whenclicked(nmbr),false);
到
我真的不应该再添加一个答案。但是正确的方法是这样做的,这样你就可以得到所有的参数,
this
slowSkrol.addEventListener('click', function( event ) {
whenclicked.apply(this, [event, nmbr]);
}, false);
然后你可以像这样使用它
function whenclicked( event, nmbr ){
alert(this, event, nmbr);
// this = slowSkrol
}
或者(如果绑定可用):
slowSkrol.addEventListener('click',whinclick.bind(slowSkrol,nmbr))
。但是,这会过度强制通过事件分配的此
,因此这是一种不好的方法。
slowSkrol.addEventListener('click', function( event ) {
whenclicked.apply(this, [event, nmbr]);
}, false);
function whenclicked( event, nmbr ){
alert(this, event, nmbr);
// this = slowSkrol
}