在循环中关联按钮和单击操作

Associate buttons and click actions in a loop

我试图在 jQuery 中将多个点击操作关联到多个按钮。我正在使用 for 循环浏览所有按钮。

我试过类似的东西:

var realThis = $(this);

// ...

for (var i = 0; i < buttons.length; i++) {
    if (typeof(buttons[i].callback) !== 'undefined')
        $('#' + buttons[i].id).click(function(){ 
            buttons[i].callback(realThis.getFormValues()); 
        });
}

我的编辑软件收到警告:

Mutable variable is accessible from closure

我尝试了几件事都没有成功。

这里有什么帮助吗?

我会更改您的 HTML 的结构,以便您知道将附加哪个处理程序。数据属性可能对您有帮助:

<button id="button-1" data-button-id="1" class="button-action">
  Do action 1
</button>

<button id="button-2" data-button-id="2" class="button-action">
  Do action 2
</button>

然后您可以将您的处理程序附加到所有按钮,并确定要在单击时调用哪个函数,而不是提前:

$('.button-action').on('click', function (e) {
   // get the button index from the data attribute
   var buttonId = $(e.currentTarget).data('buttonId');
   // if there's a callback then execute it
   if (buttons[buttonId].callback) {   
     buttons[buttonId].callback(realThis.getFormValues());
   }
});

终于找到了我的问题的答案:

for(var i = 0; i < buttons.length; i++)
{
    (function()
    {
        if(buttons[i].callback)
        {
            var callbackTemp = buttons[i].callback;

            $('#' + buttons[i].id).click(function(){ callbackTemp(realThis.getFormValues()); });
        }
    })();
}

感谢您的帮助 ;)