我正在尝试迭代以下代码,并且出于某种原因每次迭代它时,它会触发事件处理程序,是否有人知道为什么它会自动触发处理程序?
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);
}
答案 0 :(得分:2)
您正在调用该函数,并将其返回值绑定到事件,而不是将函数本身绑定到事件。将whenclicked(nmbr)
替换为:
function(){ whenclicked(nmbr); }
在现代浏览器中,您还可以使用bind:
whenclicked.bind(null, nmbr);
答案 1 :(得分:1)
变化:
slowSkrol.addEventListener('click', whenclicked(nmbr),false);
到
slowSkrol.addEventListener('click', function() {
whenclicked(nmbr);
},false);
答案 2 :(得分:1)
我不应该真的添加另一个答案。但是这样做的正确方法是让你获得所有参数而this
就是这样。
slowSkrol.addEventListener('click', function( event ) {
whenclicked.apply(this, [event, nmbr]);
}, false);
然后就可以这样使用它。
function whenclicked( event, nmbr ){
alert(this, event, nmbr);
// this = slowSkrol
}