我想实现的是用动态生成的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() 可以全删,但随便选就删不了了,我知道总题(如果先选中第一行的复选框,再选后面的就可以删了,但如果不选第一个复选取框,直接选后面的就删不掉了)出在哪,但是不会解决,请各位帮下忙.
//实现全选
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() 可以全删,但随便选就删不了了,我知道总题(如果先选中第一行的复选框,再选后面的就可以删了,但如果不选第一个复选取框,直接选后面的就删不掉了)出在哪,但是不会解决,请各位帮下忙.
{
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())); // 循环删除
}
}
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 等编号匹配到
Get方式 提交就把 键一样应该就可以了,不过没试过
doDel?id=1&id=2&id=3&id=4.....