通过 for 循环绑定会产生错误的结果

Binding via for-loop produces wrong result

本文关键字:错误 结果 for 循环 绑定 通过      更新时间:2023-09-26

我的网站上有许多缩略图,它们应该都显示相同的幻灯片放映,但显示不同的幻灯片(通过添加和删除.hidden类)。这将由 function showWork(toShow) 完成,toShow是一个数字,指的是应该可见的幻灯片。该函数还会提醒回此参数。

我还想通过mouseup事件绑定到不同的缩略图div来使用JavaScript来做到这一点。由于我不想单独列出每个绑定,我决定将所有div id 放在一个数组 ( workArr ) 中并创建一个 for 循环:

for(i=0; i < workArr.length; i++){
$("#"+workArr[i]).bind({
    mouseup: function(){
        showWork(i);
        }       
});
}

我的数组长度为 14。当我运行此代码时,我收到"14"的警报,并且没有显示幻灯片(因为没有 14. 幻灯片)。

我做错了什么?

你需要使用闭包:

for(i=0; i < workArr.length; i++){
    (function(i){
        $("#"+workArr[i]).bind({
            mouseup: function(){
                showWork(i);
            }       
        });        
    })(i);
}