Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript迭代问题_Javascript - Fatal编程技术网

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
}