在系统应用软件中,经常会有选中表格最前头的复选框进行acid的操作,而修改往往是针对一行记录,删除则是可以多行批量删除。
因为太多的界面都有这个需求,所以,完全可以抽取出一个公共的方法。因为js完成验证后往往会跳转到其他的url,所以,这里返回的是包含选中行的值的数组。
具体实现如下:
getCheckItems函数定义:
//遍历所有的checkbox,如果有选中的,那么将选中的行的对象放到数组中 function getCheckItems(){ //定义数组 var checkedItems = new Array(); //所有checkbo var selectFlags = document.getElementsByName("selectFlag"); var j =0; for (var i =0;i<selectFlags.length;i++){ if(selectFlags[i].checked){ checkedItems[j]=selectFlags[i].value; j++; } } return checkedItems; }
注:js中,如果数组定义的时候元素为空,那么可以带括号也可以不带括号,也可以直接使用中括号表示数组,元素用逗号隔开。
调用:单击修改按钮的时候,触发客户端的函数modifyItem函数。
function modifyItem() { //获取复选框数组 //如果选中的数量超过一个,给出提示只能选中一个 //如果一个也没有选中,那么也给出提示 //如果恰好选中一个,那么就指向到showmodifyitemservlet,进行查询物料类别和物料单位,然后由这个servlet将页面转发到modify.jsp, //在jsp中,点击修改后,调用B层的删除方法,然后再将页面重定向到searchitemservlet,重新回到原先的页面。 var checkedItems =getCheckItems(); var count =checkedItems.length; if (count == 0) { alert("请选择需要修改的物料!"); return; } if (count > 1) { alert("一次只能修改一个物料!"); return; } window.self.location = "<%=basePath%>servlet/item/ShowModifyItemServlet?itemNo=" + checkedItems[0]; }
之前的做法是:
function modifyItem() { var selectFlags = document.getElementsByName("selectFlag"); var count = 0; var j = 0; for (var i=0; i<selectFlags.length; i++) { if (selectFlags[i].checked) { j = i; count++; } } if (count == 0) { alert("请选择需要修改的物料!"); return; } if (count > 1) { alert("一次只能修改一个物料!"); return; } window.self.location = "<%=basePath%>servlet/item/ShowModifyItemServlet?itemNo=" + selectFlags[j].value; }
每次复用都要重新复制类似的代码,冗余太多,但是采用上面的修改方法有一个缺点是页面在给复选框命名的时候都必须统一,这样才可以抽提到一个单独的js文件中。
最近对使用js有些手生,敲一个简单的功能,温习一下。