看看关键的HTML怎么标记的:
<a href="javascript:;" class="btn btn-danger radius" id="discard"><i class="Hui-iconfont"></i> 批量删除</a>
上图可以看到,通过id绑定JS函数。
<foreach name="list" item="value" >
<tr class="text-c">
<td><input type="checkbox" value="{$value['id']}" id="btn" name="delete"></td>
如上图,循环区的点选按钮也要做标记,比如name属性,好让JS操作
如上图是我的前端界面
JS代码:
// 删除操作
$('#discard').click(function() {
var cks=document.getElementsByName("delete");
//console.log(cks);
var str="";
//拼接所有的id
for(var i=0;i<cks.length;i++){
if(cks[i].checked){
str+=cks[i].value+",";
}
}
//去掉末尾的&
str=str.substring(0, str.length-1);
//console.log(str);
//alert($(':checked').size());
if($(':checked').size() > 0) {
layer.confirm('确定要删除吗?', {
btn: ['确定','取消'], //按钮
shade: false //不显示遮罩
}, function(){
/* 注意:$.ajax和$.post传的参数还是不一样的
type: "POST",
dataType: "json",*/
$.post(
"{:U('Article/discard')}",
{str:str},
function(result) {
if(result.state == 1) {
layer.msg(result.message, {icon: 1, time: 1000});
} else {
layer.msg(res.message, {icon: 2, time: 1000});
}
setTimeout(function() {
location.reload();
}, 1000);
});
}, function(){
layer.msg('取消了删除!', {time: 1000});
});
} else {
layer.alert('没有选择!');
}
});
//批量删除还会有全选的JS操作
$('.all').click(function() {
//alert('11');die;
if($(this).is(':checked')) {
$(':checkbox').attr('checked', 'checked');
} else {
$(':checkbox').removeAttr('checked');
}
});
PHP脚本代码:
//删除留言
public function discard() {
$sstr = $_POST[str];
/* 注意接收到的不是一个字符串!而是关联数组array(1) {["str"] => string(3) "2,1"},
所以两种方式取值,1关联索引 2循环数组 取$v
foreach($str as $k => $v){
$sstr = $v;
}*/
$obj = M('cus_msg'); //实例化User对象,接着做批量删除
/* 一定要注意数据格式 ,批量删除有好几种写法,用模型CURD的delete方法(返回结果条数)可以批量
删除;也可以用in方法判断
*/
$res=$obj->delete($sstr);
//dump($res);die;
//$res=$obj->where(array(id=>array('in',$sstr)))->delete();
//不为空或0就是成功了
if (!empty($res)) {
$this->ajaxReturn(array('state'=>1,'message'=>'删除成功!'));
}else{
$this->ajaxReturn(array('state'=>0,'message'=>'删除未成功!'));
}
如图,是否通过审核我也是用ajax异步与数据库交互。
经验注意:
1.PS:$strs = explode ('&',$str);函数中间有空格导致一直报错,让我找了好一会儿bug……==
2.MYSQL查询时,DELETE FROM `test_cus_msg` WHERE id IN(11,12),in后面的括号里,要么 IN(x,x)要么
in('x','x'),即引号的用法很有讲究……开始写IN(‘x,x,x’)是错的,只能删第一个,不能批量删除……
思路参考了以下博文
https://blog.youkuaiyun.com/zhangguoliang12309/article/details/78793733