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

时间:2015-02-10 10:07:46

标签: javascript jquery click mutable

我试图将几个点击操作与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()); 
        });
}

我收到了编辑软件的警告:

  

可从闭包

访问可变变量

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

这里有任何帮助吗?

2 个答案:

答案 0 :(得分:1)

我会更改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());
   }
});

答案 1 :(得分:0)

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

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()); });
        }
    })();
}

谢谢你的帮助;)