函数引用而不是函数体 - 在循环中(带参数)

时间:2012-11-22 00:19:03

标签: javascript

我想替换它:

for( var i=0; i<elementArray.length; i++ )
   elementArray[i].click(function(){
      console.log("element clicked - selectedElementIndex = " + i);                    
   });

有类似的东西:

for( var i=0; i<elementArray.length; i++ )
    elementArray[i].click( onElementClick(i) );

function onElementClick( i ){
   console.log("element clicked - selectedElementIndex = " + i ); 
}

我该怎么办? :)

4 个答案:

答案 0 :(得分:4)

因为(据我所知)点击处理程序不能接受参数,你需要在范围内创建一个带变量的函数,它应该是这样的:

for( ... ) {
    elementArray[i].click( onElementClick(i) );
    ...
}

function onElementClick( id ){
   return function() {
       console.log("element clicked - selectedElementIndex = " + id ); 
   }
}

答案 1 :(得分:1)

替换:

elementArray[i].click( onElementClick(i) );

使用:

elementArray[i].click( onElementClick(elementArray[i].id));

答案 2 :(得分:0)

将其包装在函数表达式中:

elementArray[i].click(function() {

    onElementClick(i);

});

您还需要将代码包装在函数表达式中以避免棘手问题:

(function() {

    ...

    for ( ... ) (function(i) {

        elementArray[i].click(function() {

            onElementClick(i);

        });

    })(i);

})();

答案 3 :(得分:0)

使用data可能看起来像:

for (... {

  elementArray[i].click( onElementClick ).data('id',i);
}

function onElementClick(){
       console.log("element clicked - selectedElementIndex = " + $(this).data('id') ); 
}