我正在创建一个动态ul并尝试仅获取特定ul的复选框。
$(document).on("click", "input:checkbox[name=filter]:checked", function() {
var flags = Array();
$("input:checkbox[name=filter]:checked").each(function() {
flags.push($(this).val());
});
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
&#13;
所有三个 UL 都是相同的,在这种情况下,如何才能获得特定ul的所有复选框。
这给了我所有选中的所有复选框。
答案 0 :(得分:3)
我想你只想要包含被点击元素的ul。试试这个:
$(document).on("click", "input:checkbox[name=filter]:checked", function(){
var flags = Array();
$("input:checkbox[name=filter]:checked", $(this).parents("ul").first()).each(function(){
flags.push($(this).val());
});
console.log(flags);
});
内部each
函数前面有一个$(this).parents("ul").first()
范围标识符。这将过滤单击输入的容器的输入。
答案 1 :(得分:2)
要实现这一点,您需要获取closest()
ul
元素,然后find()
ul
中的所有复选框,然后再循环它们以构建数组。另请注意,您可以使用map()
来简化循环。试试这个:
$(document).on("click", "input:checkbox[name=filter]:checked", function() {
var flags = $(this).closest('ul').find("input:checkbox[name=filter]:checked").map(function() {
return this.value;
}).get();
console.log(flags);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
答案 2 :(得分:0)
请试一试。
var flags;
$("input[name=filter]").on("click",function(){
var ul = $(this).parent().parent();
flags = ul.find("input:checked").map(function(){return this.value});
})
答案 3 :(得分:0)
您可以在函数外部声明flags变量,以便可以将每个选中的复选框值推送到数组。
var flags = Array();
$(document).on("click", "input:checkbox[name=filter]:checked", function() {
flags.push($(this).val());
console.log(flags);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
答案 4 :(得分:0)
如果使用委托事件处理程序,则可以使用事件对象的delegateTarget属性:
event.delegateTarget
附加了当前调用的jQuery事件处理程序的元素。
然后,您可以使用此delegateTarget来限制搜索复选框,使用find。
示例:
$("ul.dropdown-list").on("click", "input:checkbox[name=filter]:checked", function(e) {
//console.log(e.target); /* input:checked */
//console.log(e.delegateTarget); /* ul.dropdown-list */
var checkedBoxes = $(e.delegateTarget).find("input:checkbox[name=filter]:checked");
var selections = checkedBoxes.map((id, inp) => inp.value);
console.log(selections.get());
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>
<ul class="dropdown-list">
<li><input type="checkbox" name="filter" value="form">Form</li>
<li><input type="checkbox" name="filter" value="anonymise">Anonymise</li>
<li><input type="checkbox" name="filter" value="priority">Priority</li>
<li><input type="checkbox" name="filter" value="question">Question</li>
</ul>