首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JSP/JavaScript 判斷表格內複選框是否全選、統計未選數量

     編輯:程式設計綜合問答

需求場景

JSP 循環輸出 10 條記錄,每行首列含複選框。點擊「保存」按鈕時需:

  1. 判斷是否全選
  2. 若非全選,獲取未選中的數量

頁面截圖

原生 JavaScript 實現(零依賴)

<table id="tableid">
  <c:forEach items="${list}" var="item">
    <tr>
      <td><input type="checkbox" name="ids" value="${item.id}" /></td>
      <td>${item.name}</td>
    </tr>
  </c:forEach>
</table>

<input type="button" id="save" value="保存" onclick="checkChecked()" />

<script>
function checkChecked() {
  const inputs = document.getElementById('tableid').getElementsByTagName('input');
  let checked = 0, notchecked = 0;

  for (let i = 0; i < inputs.length; i++) {
    if (inputs[i].type === 'checkbox') {
      inputs[i].checked ? checked++ : notchecked++;
    }
  }

  alert('已勾選:' + checked);
  alert('未勾選:' + notchecked);

  // 業務邏輯示例
  if (notchecked > 0) {
    if (!confirm(`尚有 ${notchecked} 條未勾選,確定保存?`)) return;
  }
  // 提交表單或 AJAX...
}
</script>

jQuery 版本(更簡潔)

function checkChecked() {
  const $chk = $('#tableid input[type="checkbox"]');
  const checked = $chk.filter(':checked').length;
  const notchecked = $chk.length - checked;

  alert(`已勾選:${checked},未勾選:${notchecked}`);

  if (notchecked > 0 && !confirm(`尚有 ${notchecked} 條未勾選,確定保存?`)) return;
  // $('#formId').submit();
}

進階:全選/反選功能

<th><input type="checkbox" id="checkAll" /></th>

<script>
$('#checkAll').click(function() {
  $('#tableid input[name="ids"]').prop('checked', this.checked);
});

常見問題排查

現象原因解決
統計數量為 0表格無 id="tableid" 或選擇器錯誤檢查 HTML 結構與 JS 選擇器一致性
動態新增行不生效事件綁在靜態元素上改用事件委託 $(document).on('click', '#tableid input', ...)
提交時未勾選值也被發送未勾選的 checkbox 不會隨表單提交屬於 HTML 標準行為,無需處理

最佳實踐清單

  1. ✅ 給表格加唯一 id,避免全局選擇器污染
  2. ✅ 優先用 type="button" 防止誤觸發表單提交
  3. ✅ 複雜邏輯提取為獨立函數,便於單元測試
  4. ✅ 後端仍需校驗權限與數據完整性,前端校驗僅為體驗

總結

通過 getElementsByTagName 或 jQuery 選擇器遍歷 input[type=checkbox],即可輕鬆統計勾選狀態。核心邏輯不足 10 行,關鍵在於「精準定位表格範圍」與「區分業務必選與可選」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved