You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让DataTables归档功能处理所有分页的选中复选框?

问题说明

现有一段可选中DataTables所有分页复选框的代码,其中index.jsp里的archivarTodo函数运行正常,但仅能归档当前可视化页面的选中复选框。#listado是展示ListDocs.jsp内容的iframe,需要修改该函数以实现归档DataTables所有分页的选中复选框。

原代码

ListDocs.jsp

<th class="th2"> <input type="checkbox" id="select-all" name="checkDocs" title="Archivamiento" /></th>
<td align="center"><input class="ck" title='Archivar' type="checkbox" id="dArc<%=cb.getIdDocumento()%>" value="<%=cb.getIdDocumento()%>"/> </td>
<td align="center"><input class="inv" title='Invalidar' type="checkbox" id="dInv<%=cb.getIdDocumento()%>" value="<%=cb.getNodo()%>" <%=invalid%> <%=disabled%> onclick="invalida(this)"/> </td>

<script>
$("#select-all").click(function(event) {
    if($(this).is(":checked")) {
        $("#tablaResultados tbody input[type='checkbox']:not(.inv):not(:checked)").prop("checked", true);
        // 遍历所有页面并选中所有复选框
        var table = $('#tablaResultados').DataTable();
        for (var i = 1; i <= table.page.info().pages; i++) {
            table.page(i).draw(false);
            $("#tablaResultados tbody input[type='checkbox']:not(.inv):not(:checked)").prop("checked", true);
        }
    } else {
        $("#tablaResultados tbody input[type='checkbox']:not(.inv):checked").prop("checked", false);
        // 遍历所有页面并取消选中所有复选框
        var table = $('#tablaResultados').DataTable();
        for (var i = 1; i <= table.page.info().pages; i++) {
            table.page(i).draw(false);
            $("#tablaResultados tbody input[type='checkbox']:not(.inv):checked").prop("checked", false);
        }
    }
});
</script>

index.jsp

function archivarTodo(){
    var trans =  document.getElementById('transf').value;
    if(trans == '1'){
        if(nodoCarp===""){
            alert("请选择一个文件夹");
        }else{
            var checkboxValues = "";

            $("#listado").contents().find(".ck:input:checked").each(function() {
                checkboxValues += $(this).val() + ",";
            });
            
            checkboxValues = checkboxValues.substring(0, checkboxValues.length-1);
            
            if (checkboxValues===""||checkboxValues==="on"){
                alert("未选择任何要归档的文档");
                return;
            }

            if(confirm("确定要执行归档吗?")){
                esperarCarp2("../imagenes/loadingAnimation.gif","500","1000","../archivar/ArchivarDoctosFiduciario.jsp?nodo="+nodoCarp+"&idDocs="+checkboxValues); 
            }
        }
    }else{alert("您没有归档权限");}    
}

解决方案

可以通过DataTables的API直接获取所有分页内的选中复选框,修改后的archivarTodo函数如下:

function archivarTodo() {
  var trans = document.getElementById('transf').value;
  console.log("权限值:", trans);
  if (trans == '1') {
    if (nodoCarp === "") {
      alert("请选择一个文件夹");
    } else {
      var iframe = document.getElementById('listado');
      var iframeWindow = iframe.contentWindow;
      var dataTable = iframeWindow.$('#tablaResultados').DataTable();
      var checkboxValues = "";

      // 获取DataTables所有分页中class为ck的选中复选框
      dataTable.$('.ck:input[type="checkbox"]:checked').each(function() {
        console.log("复选框值:", $(this).val());
        checkboxValues += $(this).val() + ",";
      });

      // 去除末尾多余的逗号
      if (checkboxValues.length > 0) {
        checkboxValues = checkboxValues.substring(0, checkboxValues.length - 1);
      }
      console.log("选中的复选框集合:", checkboxValues);

      if (checkboxValues === "") {
        alert("未选择任何要归档的文档");
        return;
      }

      if(confirm("确定要执行归档操作吗?")){
        esperarCarp2("../imagenes/loadingAnimation.gif","500","1000","../archivar/ArchivarDoctosFiduciario.jsp?nodo="+nodoCarp+"&idDocs="+checkboxValues); 
      }
    }
  } else {
    alert("您没有归档权限");
  }    
}

关键修改说明

  • 直接调用iframe内的DataTables实例,利用API的$()方法获取所有分页的DOM元素(包括未渲染的页面),替代原仅查找当前页DOM的逻辑
  • 优化空值判断逻辑,避免出现无效的"on"值问题
  • 统一提示文本为中文,提升可读性

内容的提问来源于stack exchange,提问作者Luna Project

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:40:05