如何获取特定ul的选中复选框

时间:2017-05-02 11:44:55

标签: javascript jquery html

我正在创建一个动态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;
&#13;
&#13;

所有三个 UL 都是相同的,在这种情况下,如何才能获得特定ul的所有复选框。

这给了我所有选中的所有复选框。

5 个答案:

答案 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>