查找已选中复选框的顺序

时间:2016-03-25 22:23:27

标签: javascript jquery html dom checkbox

我试图获取已选中复选框的顺序。

<ul class="dropdown-content checkboxes">
  <li><label><input type="checkbox" />Billy</label></li>
  <li><label><input type="checkbox" />Jacob</label></li>
  <li><label><input type="checkbox" />Bob</label></li>
  <li><label><input type="checkbox" />Alexandren</label></li>
  <li><label><input type="checkbox" />Erren</label></li>
  <li><label><input type="checkbox" />Stewgart</label></li>
  <li><label><input type="checkbox" />Jillian</label></li>
  <li><label><input type="checkbox" />Other</label></li>
</ul>

我提出了这个问题,但我无法检查选中复选框时的顺序。我只能查看仅检查哪些列表。

$(":checkbox").click(function() {
    console.log($(":checked").length);
    var i = 0;
    checked = true;
    $(':checkbox').each(function() {
        if (this.checked == false) {
            i++;
            if (i === 8) {
                checked = false;
            }
        }
    });
});

我如何获取他们检查的订单数据?例如&#34;复选框1,6,3,2按此顺序检查&#34;

3 个答案:

答案 0 :(得分:5)

您将跟踪检查的复选框,例如在数组中

var order = [];

$("[type=checkbox]").on('change', function() { // always use change event
    var idx = order.indexOf(this);
	
    if (idx !== -1) {         // if already in array
    	order.splice(idx, 1); // make sure we remove it
    }

    if (this.checked) {    // if checked
    	order.push(this);  // add to end of array
    }
    
    // <------------------------------------For demonstration
    $('#result').html(JSON.stringify($.map(order, function(elem) {
    	return $(elem).closest('label').text().trim();
    })));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="dropdown-content checkboxes">
  <li><label><input type="checkbox" />Billy</label></li>
  <li><label><input type="checkbox" />Jacob</label></li>
  <li><label><input type="checkbox" />Bob</label></li>
  <li><label><input type="checkbox" />Alexandren</label></li>
  <li><label><input type="checkbox" />Erren</label></li>
  <li><label><input type="checkbox" />Stewgart</label></li>
  <li><label><input type="checkbox" />Jillian</label></li>
  <li><label><input type="checkbox" />Other</label></li>
</ul>
<div id="result"></div>

要获取每个复选框的索引,或者更准确地说是父LI,您可以只映射它们

var map = $.map(order, function(elem) {
    return $(elem).closest('li').index();
});

FIDDLE

答案 1 :(得分:2)

你也可以用纯JavaScript做到这一点:

var result = document.getElementById('result');
var order = [];

[].forEach.call(document.querySelectorAll('input[type="checkbox"]'), function (checkbox) {
    'use strict';
    checkbox.addEventListener('change', function () {
        var previousLi = checkbox.parentNode.parentNode.previousElementSibling;
        var index = 0;
        while (previousLi !== null) {
            previousLi = previousLi.previousElementSibling;
            index += 1;
        }

        if (checkbox.checked) {
            order.push(index);
        } else {
            order.splice(order.indexOf(index), 1);
        }

        result.textContent = order;
    });
});
<ul class="dropdown-content checkboxes">
  <li><label><input type="checkbox"/>Billy</label></li>
  <li><label><input type="checkbox"/>Jacob</label></li>
  <li><label><input type="checkbox"/>Bob</label></li>
  <li><label><input type="checkbox"/>Alexandren</label></li>
  <li><label><input type="checkbox"/>Erren</label></li>
  <li><label><input type="checkbox"/>Stewgart</label></li>
  <li><label><input type="checkbox"/>Jillian</label></li>
  <li><label><input type="checkbox"/>Other</label></li>
</ul>
<p id="result"></p>

在上面的代码中,对于每个复选框,我们调用函数,对其进行更改:

  • 获取我们input的{​​{1}}在其父级中的索引,
  • 任一
    • 在检查时将数据添加到数组末尾,或
    • 取消选中时删除数组中的相应元素,
  • 提供一个数组(用于演示目的)。

答案 2 :(得分:1)

您需要绑定到被单击的复选框,并将与复选框对应的一些信息推送到数组,然后搜索数组,它们的位置将是检查它们的顺序。