【发布时间】:2023-03-17 16:27:02
【问题描述】:
我有以下三组复选框:
<h3 class="heading">List 1 <span><a id="list1" href="javascript:;">check all</a></span></h3>
<label><input type="checkbox" name="list1[]" value="3" /> Option 1</label><br />
<label><input type="checkbox" name="list1[]" value="4" /> Option 2</label><br />
<label><input type="checkbox" name="list1[]" value="5" /> Option 3</label><br />
<h3 class="heading">List 2 <span><a id="list2" href="javascript:;">check all</a></span></h3>
<label><input type="checkbox" name="list2[]" value="3" /> Option 1</label><br />
<label><input type="checkbox" name="list2[]" value="4" /> Option 2</label><br />
<label><input type="checkbox" name="list2[]" value="5" /> Option 3</label><br />
<h3 class="heading">List 3 <span><a id="list3" href="javascript:;">check all</a></span></h3>
<label><input type="checkbox" name="list3[]" value="3" /> Option 1</label><br />
<label><input type="checkbox" name="list3[]" value="4" /> Option 2</label><br />
<label><input type="checkbox" name="list3[]" value="5" /> Option 3</label><br />
使用 JQuery,我正在尝试获取它,因此当单击“检查所有”链接时,它会动态找到下一个 input 名称:
$('#list1, #list2, #list3').on('click', function () {
var allChecked = true;
var inputName = $(this).next('label > input:checkbox').attr('name');
console.log(inputName);
inputName.each(function() {
if (!this.checked) {
allChecked = false;
}
});
inputName.prop('checked', !allChecked);
});
问题是我所有试图找到下一个input 名称的尝试都失败了,控制台返回:undefined。我做错了什么?
【问题讨论】:
-
你读过
.next()方法的文档吗?它只查找下一个 sibling (如果有一个匹配选择器),它通常不只是通过 DOM 搜索。 -
@nnnnnn 是的,不仅仅是
next()...我试过nextAll()、find()等... -
目标是找到下一个名称,还是只是选中/取消选中相关元素?两者都可以,但你并不需要搜索名称,因为它与被点击元素的 ID 相同,只是末尾带有
[]。 -
您可能需要实现一种比依赖内置 jQuery 方法更复杂的方法来定位它们。此外,您有这么多重复的
name属性可能会带来问题... -
@anied - 重复的
names 没有错。他们有不同的价值观。
标签: javascript jquery html