在循环中关联按钮和单击操作
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()); });
}
})();
}
感谢您的帮助 ;)
我试图在 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()); });
}
})();
}
感谢您的帮助 ;)