我们通常都会遇到这样的一个需求,那就是批量操作!像这样:
前端页面代码(一个tr的代码)及解析:
<tr> <td><input name="ids" type="checkbox" class="dr_select" value="{$t.uid}" /></td> <td>{$t.uid}</td> <td>{$t.name}</td> <td>{if $t[groupid]==1} 待审核 {else if $t[groupid]==3} 独立经纪人 {else if $t[groupid]==4} 职业经纪人 {else} 其他 {/if} </td> </tr>
这里会员组名称是根据会员组id来判别的,用的是php脚本(poscms的写法),记录是用foreach循环输出的,
最后一行全选的前端代码如下:
<tr> <th><input id="dr_select" type="checkbox" onClick="dr_selected()" /> </th> <td colspan="10" > <label> <button onClick="changeGroup()">修改为</button> </label> <label> <select id="groupid"> <option value="1" selected> 待审核 </option> <option value="4" > 职业经纪人 </option> <option value="3" > 独立经纪人 </option> </select> </label> </td> </tr>
全选函数dr_selected():
function dr_selected() { if ($("#dr_select").prop("checked")) { $(".dr_select").prop("checked", true); } else { $(".dr_select").prop("checked", false); } }
“修改为”按钮单击事件changeGroup():
function changeGroup() { //获取记录条目中的所有复选框DOM var obj = $("input:checkbox[name='ids']"); //获取单选框的值 var groupid = $("#groupid").val(); //定义一个数组ids来装所有选中条目的id值 var ids = []; for(k in obj){ if(obj[k].checked) ids.push(obj[k].value); } //向后台发起ajax请求,传递ids和将要转变的会员组id值 $.ajax({ type: "GET", url: siteurl, dataType: "json", data:{ "c":"api", "m":"changegroup", "ids":ids, "groupid":groupid }, success: function(text) { var _iframe = window.parent; var _div =_iframe.document.getElementById('rightMain'); _div.contentWindow.location.reload(true); }, error: function(text) { var _iframe = window.parent; var _div =_iframe.document.getElementById('rightMain'); _div.contentWindow.location.reload(true); } }); }
由于不知道接口会不会出现“返回数据类型不是json的”错误,success回调和error回调都将刷新当前iframe页面,对于200OK
状态ajax执行回调的不确定性,之前已经作过详解,不明白的可以参考博主的这篇博客:https://www.cnblogs.com/eco-just/p/9094940.html。
其实这里应该将iframe刷新的代码封装成一个函数,避免大家看得混乱,这里就不作封装了,但是实际写的时候要注意封装。
接下来看接口是怎么处理的(admin.php?c=api&m=changegroup):
public function changegroup() { $ids = $this->input->get('ids'); $groupid = $this->input->get('groupid'); foreach ($ids as $id) { $data = array('groupid'=>$groupid,); $this->db->where('uid', $id); $this->db->update('mt_member', $data); } }
这里也不难理解,获取前台传来的ids数组和将转换的groupid,然后遍历这个ids数组,对每个id对应的数据库记录,
进行groupid字段的更改。
至此,批量操作的流程就已经完成了!