Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关联按钮并单击循环中的操作_Javascript_Jquery_Click_Mutable - Fatal编程技术网

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

Javascript 关联按钮并单击循环中的操作,javascript,jquery,click,mutable,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(){ bu

在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()); 
        });
}
我从我的编辑软件中得到警告:

可从闭包访问可变变量

我做了几件事都没有成功


这里有什么帮助吗?

我会更改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>

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

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

谢谢你的帮助

这里的代码似乎有点太复杂了。如果所有按钮都具有相同的事件处理程序,则不需要在循环中分配它。您可以使用一个类一次选择所有元素;在循环之前和内部使用按钮[i]。callbackformValues@谢谢你的回答。所有的回调函数可能不同于按钮:/I我无法避免使用循环。@dfsq我认为这种行为不适合我的需要。实际上,我只想在单击按钮时传递realThis.getFormValues的结果。realThis.getFormValues的结果可以随时更改;i.长度;i++{iftypeofbuttons[i]。回调!='undefined'{var t=buttons[i]。回调;$+按钮[i].id.clickfunction{trealThis.getFormValues;};}}},但它也不工作。当我单击其中一个按钮时,调用的回调函数始终是for循环的最后一次迭代。
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()); });
        }
    })();
}