我有从1到10编号的DOM对象:checkbox_1,back_arrow_1,checkbox_2,back_arrow_2。单击箭头时,我希望它执行具有相同名称的复选框对象的单击功能,例如

back_arrow_1 clicked
-> $(checkbox_1).click();


我正在动态绑定back_arrow的click函数:

(function(){
   for (var ar_num = 1; ar_num < 4; ar_num++){
          $("back_arrow_"+ar_num).bind("click", function () {
          $("checkbox_"+ar_num).click();
       });
   }

})();


并且console.logging()表明它确实绑定了正确的箭头,但是当我单击任何箭头时,它都为checkbox_4执行了click函数,这是因为我假设例如,而不是绑定“ checkbox_1”浏览器执行checkbox_ + ar_num事件,获取for循环将ar_num保留在的数字。

什么是执行此功能的正确方法?

最佳答案

您需要设置一个闭包,在您的click函数中,结束循环后将保存ar_num的值。

看这个:jsfiddle

for (var ar_num = 1; ar_num < 4; ar_num++){
    (function(num) {
        $("#back_arrow_"+num).bind("click", function () {
            $("#checkbox_"+num).click();
        });
    })(ar_num);
}

关于javascript - 动态绑定(bind)编号的对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20188736/

10-16 12:56