翻页之后复选框还保持选中状态

function batchdel() {//批量删除
        var chk_value =[]; 
            $('input[name="ids"]:checked').each(function(){ //获取已选中的学号
                chk_value.push($(this).val());
            });
            if (chk_value.length==0) {
                alert("请选择学号!");
                return false;
            }
            if (chk_value.length > 0) {
                var msg = '确认删除' + chk_value + '吗?';
                if (confirm(msg) == true) {
                    location.href = "<%=basePath%>user/batchDelete?chk_value=" + chk_value;
                    return true;
                } else {
                    return false;
                }
            }
    }    
    
    var checkedIds=""; //翻页保存选中的id
    /**
     * 记录选择的元素
     * @return
     */
    function changeIds(){
        var oneches=document.getElementsByName("ids");
        for(var i=0;i<oneches.length;i++){
            if(oneches[i].checked==true){
                 //避免重复添加(若存在元素时,不添加)
                if(!contains(checkedIds,oneches[i].value)){
                     checkedIds+=oneches[i].value+",";
                     //console.log(oneches[i].value);
                }
             }
            if(oneches[i].checked==false){
                //取消复选框时 含有该id时将id从全局变量中去除
                if(contains(checkedIds,oneches[i].value)){
                    checkedIds=checkedIds.replace((oneches[i].value+","),"");
                }
             }
         }
     }
    /**
     * 
     * @return
     */
    function getChecked(){
        if(checkedIds==""){
            return;
        }
        var oneches=document.getElementsByName("ids");
        
        for(var i=0;i<oneches.length;i++){
            //全局变量中含有id,则该复选框选中
            if(contains(checkedIds,oneches[i].value)){
                 oneches[i].checked="checked";
                 //console.log(oneches[i].value);
            }
         }
     }
    /**
     * 判断数组是否存在元素
     * @param obj
     * @param ele
     * @return
     */
    function contains(obj, ele) {
        //console.log(obj);
        //console.log(ele);
        if(obj==""){
            return;
        }
        /*若参数obj为字符串时,需要转换成数组*/
        var arr = obj.split(",");
        //console.log(arr);
        var i = arr.length;
        while (i--) {
            if (arr[i] == ele) {
                return true;  
            }  
        }  
        return false;  
    }
    function handleClick(){
          changeIds();
          getChecked();
          contains('1','2');
        }

图片描述

不报错,控制台有输出,没实现效果

阅读 3.3k
3 个回答

----猜测原因, 并修改答案
翻页之后
你调用了handleClick函数。

function handleClick(){
    changeIds() ;
    getChecked();

}

翻页之后,复选框全部都为未勾选状态
handleClick函数执行changeIds函数

程序走入oneches[i].checked==false的条件 所以将你的checkedIds循环replace为空字符串

function changeIds(){
    var oneches=document.getElementsByName("ids");
    for(var i=0;i<oneches.length;i++){
        // console.log(oneches[i].checked)
        if(oneches[i].checked==true){
             //避免重复添加(若存在元素时,不添加)
            if(!contains(checkedIds,oneches[i].value)){
                 checkedIds+=oneches[i].value+",";
            }
         }
        if(oneches[i].checked==false){
            if(contains(checkedIds,oneches[i].value)){
                checkedIds=checkedIds.replace((oneches[i].value+","),"");
            }
         }
     }
 }

由于for循环阻塞机制,所以执行完循环之后才会执行getChecked()
但是这时的checkedIds 已经为空字符串。

function getChecked(){
    if(checkedIds==""){
        return;
    }
    var oneches=document.getElementsByName("ids");
    for(var i=0;i<oneches.length;i++){
        //全局变量中含有id,则该复选框选中
        if(contains(checkedIds,oneches[i].value)){
            oneches[i].checked="checked";
        }
    }
}

所以,你的input事件应该只调用changeIds函数
翻页之后调用getChecked函数

建议你自行调试一下 这个方法 getChecked

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题