我想实现的是用动态生成的checkbox 实现单个删除和多个删除功能.现在我写的 JS 能实现全部删除,但单个删除有问题,请帮下忙. JS 代码如下:
  //实现全选
       function checkAll(checks)
       {
             var items = document.getElementsByTagName("input");
             for(i=0;i< items.length;i++)
             {
                 if(items[i].type=="checkbox")
                 {
                    items[i].checked =checks.checked;
                 }
             }
       }
       
       //实现删除
       function toDel()
       {
           var cks = document.getElementsByName("ckone");
           for(var i=0;i<cks.length;i++)
           {
              if(cks[i].checked==false)
              {
                alert("至少选择一条数据!");
                return;
              }else
              {
                  document.location.href='doDel?id=' + document.getElementsByName("ckone")[i].value;
              }
           }
       }
<input type="checkbox" name="ckone" value="${list.id }"  /> 这是动态生成的
全选<input type="checkbox" name="ckAll" onclick="checkAll(this)"> 这是全选
以前我们用 String [] s = request.getParameterValues("ckone"); 就行,可是我用它总是取不到值
用toDel() 可以全删,但随便选就删不了了,我知道总题(如果先选中第一行的复选框,再选后面的就可以删了,但如果不选第一个复选取框,直接选后面的就删不掉了)出在哪,但是不会解决,请各位帮下忙.

解决方案 »

  1.   

      if(cks[i].checked==false)
      {
      alert("至少选择一条数据!");
      return;
      }
    你这句中的return;不对啊,当第一个checkbox 不被选中时,会执行这个return, 方法就被返回终止了,后面的代码都不再继续执行了,肯定删不了,而且你这种方式也不好的。
    我们的处理方式是这样:function toDel(){
        var ids = "";   // 先定义一个字符串变量,用于串接编号    var cks = document.getElementsByName("ckone");
        for(var i=0;i<cks.length;i++){
            if(cks[i].checked == true){
                ids += cks[i].value + ",";    // 在这里追加 选中的复选框的值,并用逗号分隔
            }
        }    if (ids !== ""){
            location.href='doDel?ids='+ids;
        } else {
            alert("至少选择一条数据!");
            return false;
        }
    }后台处理:    String ids = request.getParameter("ids");    if (null != ids && !"".equals(ids.trim())){
            for(int i = 0 ; i < ids.split(","); i++ ){ // 将ids 字符串按逗号分隔为 字符串数组
                service.deleteEntity(Integer.valueOf(ids[i].trim()));  // 循环删除
                
            }
        }
      

  2.   

    后台处理的方式,还可优化function toDel(){
        var ids = ",";   // 先定义一个字符串变量,用于串接编号,这里初始值要为一个逗号    var cks = document.getElementsByName("ckone");
        for(var i=0;i<cks.length;i++){
            if(cks[i].checked == true){
                ids += cks[i].value + ",";    // 在这里追加 选中的复选框的值,并用逗号分隔
            }
        }    if (ids !== ","){     // 判断也以 逗号为主
            location.href='doDel?ids='+ids;
        } else {
            alert("至少选择一条数据!");
            return false;
        }
    }后台处理:String ids = request.getParameter("ids");if (null != ids && !"".equals(ids.trim())){
        service.deleteEntity(ids);   // 直接将逗号串接的编号字符串传入到数据访问层;
    }// 数据访问层:
    String sql = "DELETE FROM TABLE_NAME WHERE CHARINDEX(','+CAST(ID AS VARCHAR(10))+',', ?)>0";
    // 把ids 直接传进去就行了
    CHARINDEX(A,B) 函数在 B 字符串中 查找 A字符串,返回 A 在 B 中的索引,这个是SQL SERVER 的系统函数,其它数据库也有类似的函数上面的sql 可以这样看 WHERE CHARINDEX(  ',23,'    ,   ',15,45,23,46,'  ) > 0 就删除
    这样无论你是一个编号,还是多个编号,这条SQL 都可以删除, 加逗号是为了避免 23 和 123 或 223 等编号匹配到
      

  3.   

    想得到数组,表单 Post 提交了,Post 提交 同名的元素,会得到数组
    Get方式 提交就把 键一样应该就可以了,不过没试过
    doDel?id=1&id=2&id=3&id=4.....