javascript - for循环将点击功能添加到jQuery中的多个输入字段未按预期工作

标签 javascript jquery for-loop

我有多个复选框需要充当单选按钮。 复选框字段的数量可能会有所不同,因此我尝试使用 for 循环来遍历它们。

当我使用下面的代码时,一切正常

$("input[name='item_meta[221][0][253][]']").on('click', function() {$("input[name='item_meta[221][0][253][]']").not(this).attr('checked', false)});
$("input[name='item_meta[221][1][253][]']").on('click', function() {$("input[name='item_meta[221][1][253][]']").not(this).attr('checked', false)});
$("input[name='item_meta[221][0][268][]']").on('click', function() {$("input[name='item_meta[221][0][268][]']").not(this).attr('checked', false)});
$("input[name='item_meta[221][1][268][]']").on('click', function() {$("input[name='item_meta[221][1][268][]']").not(this).attr('checked', false)});

但是,这意味着如果我有 10 个这样的复选框组,我将需要为每个复选框编写 10 行。所以我尝试用这样的 for 循环做同样的事情:

for (i=0; i < 1; i++){
     $("input[name='item_meta[221][" + i + "][253][]']").on('click', function() {$("input[name='item_meta[221][" + i + "][253][]']").not(this).attr('checked', false)});
     $("input[name='item_meta[221][" + i + "][268][]']").on('click', function() {$("input[name='item_meta[221][" + i + "][268][]']").not(this).attr('checked', false)});
}

但是当我使用它时,它不起作用?! 那我错过了什么??

最佳答案

let 试试吧。

说明:代码中的变量i,是一个全局变量(用var声明)。与 let 不同,var 不支持 block 作用域。单击事件实际上是在第一次单击按钮时绑定(bind)的,而不是在 for 循环执行时绑定(bind)的。由于 i 是一个全局变量,它已经通过循环迭代并且它的值变成了 10。当按钮被点击时,按钮被绑定(bind)到 input[name='item_meta[221] [10][268][]'] 不存在。这就是使用 let 的原因,因为它支持 block 范围,并保留其绑定(bind)事件的值。

for (let j = 0; j < 10; j++) {
  $("input[name='item_meta[221][" + j + "][253][]']").on('click', function() {
    $("input[name='item_meta[221][" + j + "][253][]']").not(this).attr('checked', false)
  });
  $("input[name='item_meta[221][" + j + "][268][]']").on('click', function() {
    $("input[name='item_meta[221][" + j + "][268][]']").not(this).attr('checked', false)
  });
}

关于javascript - for循环将点击功能添加到jQuery中的多个输入字段未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63337576/

相关文章:

javascript - 以两种不同的方式调用函数 - JavaScript

javascript - 在更改和页面加载时运行 jQuery

javascript - javascript 中空字符串是否被视为假字符串?

jquery - 如何在页面加载前运行加载动画

javascript - 如何获取除 $(this) 之外的所有类值

javascript - 如何从事件 ajax :error in Rails 5. 1 的响应中获取数据

javascript - 如何删除具有由另一个数组的值指定的索引的数组的所有值?

python - TkInter 所有按钮打开同一个文件

javascript - 如何为所有实例分配可拖动属性

python - 为什么不对我的所有列表运行此循环?