-1

我正在尝试迭代以下代码,并且由于某种原因,每次我迭代它时,它都会触发事件处理程序,有人知道为什么它会自动触发处理程序吗?

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);
}
4

3 回答 3

2

您正在调用函数,并将其返回值绑定到事件,而不是将函数本身绑定到事件。替换whenclicked(nmbr)为:

function(){ whenclicked(nmbr); }

在现代浏览器中,您还可以使用bind

whenclicked.bind(null, nmbr);
于 2013-08-29T02:49:13.207 回答
1

改变:

slowSkrol.addEventListener('click', whenclicked(nmbr),false);

slowSkrol.addEventListener('click', function() {
    whenclicked(nmbr); 
},false);
于 2013-08-29T02:51:20.367 回答
1

我真的不应该添加另一个答案。但是这样做的正确方法是让你得到所有的论点,this就像这样。

slowSkrol.addEventListener('click', function( event ) {
   whenclicked.apply(this, [event, nmbr]);
}, false);

然后你可以像这样使用它。

function whenclicked( event, nmbr ){
   alert(this, event, nmbr);
   // this = slowSkrol
}
于 2013-08-29T03:07:14.837 回答