Javascript迭代问题

时间:2013-08-29 02:46:35

标签: javascript

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

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

3 个答案:

答案 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
}