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

XMLHttpRequest场景下Shift键批量勾选复选框失效求助

解决异步加载复选框后Shift批量勾选失效问题

通过XMLHttpRequest异步加载复选框数据后,原本正常的Shift键批量勾选/取消功能失效,只能逐个操作。

问题原因

页面初始渲染时,异步加载的复选框还未生成,$(document).ready()中直接绑定的.chkboxtb点击事件只对当时存在的DOM元素生效,后续动态生成的复选框没有绑定该事件,导致Shift批量逻辑无法触发。

解决方法:使用jQuery事件委托

将事件绑定到已存在的父容器(如#coba)上,利用事件冒泡机制监听动态生成的复选框点击事件。

修改后的z1.php代码

<html>
<head>
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <link rel="shortcut icon" type="image/x-icon" href="/to/img/bqicon.png"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js" integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    <style>
    </style>
    <script>
        window.onload=function(){
            var coba = document.getElementById("coba");
            var xhr = new XMLHttpRequest();
            xhr.open("POST", "/to/z1ajax.php", true);
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4 && xhr.status==200){
                    coba.innerHTML = xhr.responseText;
                }
            }
            var v="onload=yes";
            xhr.send(v);
        }
    
        $(document).ready(function(){
            var lastChecked=null;
            // 事件委托:绑定到父容器#coba,监听子元素.chkboxtb的点击
            $('#coba').on('click', '.chkboxtb', function(e){
                if(!lastChecked){
                    lastChecked=this;
                    return;
                }
                if(e.shiftKey){
                    // 重新获取当前所有.chkboxtb元素,确保包含动态生成的
                    var $chkboxestb=$('.chkboxtb');
                    var start=$chkboxestb.index(this);
                    var end=$chkboxestb.index(lastChecked);
                    $chkboxestb.slice(Math.min(start,end), Math.max(start,end)+ 1).prop('checked',e.target.checked);
                }
                lastChecked = this;
            });
        });
    </script>
</head>
<body>
    <div id='coba'></div>
</body>
</html>

关键改动说明

  1. 把直接绑定.chkboxtb的click事件,改成通过父容器#coba的on()方法进行事件委托,指定监听子选择器.chkboxtb的点击事件。
  2. 在Shift键触发的逻辑里,每次都重新获取$('.chkboxtb')集合,确保包含所有动态生成的复选框,避免初始集合不包含新元素的问题。

补充说明

z1ajax.php的代码无需修改,保持原逻辑即可。

内容的提问来源于stack exchange,提问作者Juna serbaserbi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:01:05