javascript - 如何计算 list.js 中当前未显示的已选中复选框?

标签 javascript html list.js

我在 list.js 中有一个带有复选框的表格。我想计算所有选中的复选框,甚至是那些由于列表的搜索功能而隐藏的复选框。以下方法仅适用于搜索后当前显示的复选框。

<!DOCTYPE html>
<html lang="en">
<head>
<title>Counting checked checkboxes</title>
</head>
<script src="//cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script>

<body>
<div id='sample_rows'>
<div id='sample_count'></div>
<input class="search" placeholder="Search" />
<table>
    <tbody class="list">
    <tr>
        <td class='name'>checkbox1</td>
        <td class="checked">
            <input class="sample_checkbox" type="checkbox" name="checkbox1" id="checkbox1" onclick="update_count()">
        </td>
    </tr>
    <tr>
        <td class='name'>checkbox2</td>
        <td class="checked">
            <input class="sample_checkbox" type="checkbox" name="checkbox2" id="checkbox2" onclick="update_count()">
        </td>
    </tr>
    </tbody>
</table>
</div>

<script>
    var list_options = {
        valueNames: ['name', 'checked'],
        searchDelay: 500
    };
    var sample_list = new List('sample_rows', list_options);
    sample_list.on('updated', update_count);
    document.addEventListener("load", update_count());
    
    function update_count(){
        let total = sample_list.size();
        let checked_count = 0;
        let items = sample_list.items;
        for (let i = 0; i < total; i++){
            let item = items[i];
            let checkbox_id = items[i]._values['name'];
            let sample_checkbox = document.getElementById(checkbox_id);
            if(sample_checkbox != null){
                if (sample_checkbox.checked){
                    checked_count += 1;
                }
            }
            else {
                alert('Cannot find state of ' + checkbox_id);
            }
        }
        document.getElementById('sample_count').innerHTML = String(checked_count) + " selected";
    }
</script>

</body>
</html>

复选框的状态在搜索时被保留,因此计数应该是可用的。这说明了:

  1. 选中两个复选框。计数为 2。
  2. 搜索“box2”。计数显示为1,并提示未计数的框。
  3. 清除搜索框。计数再次为 2,因为未显示复选框的状态被保留。

应用搜索后如何统计所有选中的复选框?

最佳答案

无论您的复选框是否被隐藏,这段代码都会保持您的checked计数不变

<!DOCTYPE html>
<html lang="en">

<head>
  <title>Counting checked checkboxes</title>
</head>
<script src="//cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script>

<body>
  <div id='sample_rows'>
    <div id='sample_count'></div>
    <input class="search" placeholder="Search" />
    <table>
      <tbody class="list">
        <tr>
          <td class='name'>checkbox1</td>
          <td class="checked">
            <input class="sample_checkbox" type="checkbox" name="checkbox1" id="checkbox1" onclick="update_count('checkbox1')">
          </td>
        </tr>
        <tr>
          <td class='name'>checkbox2</td>
          <td class="checked">
            <input class="sample_checkbox" type="checkbox" name="checkbox2" id="checkbox2" onclick="update_count('checkbox2')">
          </td>
        </tr>
      </tbody>
    </table>
  </div>

  <script>
    var checked_count = 0;
    var list_options = {
      valueNames: ['name', 'checked'],
      searchDelay: 500
    };
    var sample_list = new List('sample_rows', list_options);
    sample_list.on('updated', update_count);
    document.addEventListener("load", update_count_on_load());

    function update_count_on_load() {
      let total = sample_list.size();
      let checked_count = 0;
      let items = sample_list.items;
      for (let i = 0; i < total; i++) {
        let item = items[i];
        let checkbox_id = items[i]._values['name'];
        let sample_checkbox = document.getElementById(checkbox_id);
        if (sample_checkbox != null) {
          if (sample_checkbox.checked) {
            checked_count += 1;
          }
        } else {
          alert('Cannot find state of ' + checkbox_id);
        }
      }
      document.getElementById('sample_count').innerHTML = String(checked_count) + " selected";
    }

    function update_count(checkbox_id) {
      let sample_checkbox = document.getElementById(checkbox_id);
      if (sample_checkbox) {
        if (sample_checkbox.checked) {
          checked_count += 1;
        } else {
          checked_count -= 1;
        }
      }
      document.getElementById('sample_count').innerHTML = checked_count + " selected";
    }
  </script>

</body>

</html>

关于javascript - 如何计算 list.js 中当前未显示的已选中复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67183356/

相关文章:

javascript - 从 HTML 文本中捕获数字

javascript - 更新 ng-repeat 中的嵌套对象

javascript - jquery 是否仍然通过 ajax 与已显示的 dom 元素一样使用其他 dom 元素?

javascript - 添加更多内容(例如图像)后,如何保持我的内容不从网格内部移动?

javascript - 防止自动搜索/添加搜索按钮List.js

javascript - List.js 找到元素但仍然保留其他元素

javascript - 未捕获的类型错误 : Cannot set property of null

javascript - 使用 d3.js 的外部 SVG 幻灯片放映

javascript - 如何通过javascript向表单添加值?

javascript - 为什么当我尝试对列表进行排序时单击按钮时 list.js 不起作用