html页面中,如果涉及到多数据的提交,利用JS中的数组对象,可以实现类似于java语言中List等集合对象的功能,这将大大增加页面于后台交互的能力。
Array对象有许多基础方法,例如:push(增加),join(转化为字符串、以逗号分隔),sort(排序),但是没有提供删除方法,这里需要自己实现。
Array.prototype.remove=function(dx)
{
if(isNaN(dx)||dx>this.length){return false;}
for(var i=0,n=0;i<this.length;i++)
{
if(this[i]!=this[dx])
{
this[n++]=this[i]
}
}
this.length-=1
}
需要注意,每次删除完一个数组元素,数组的长度会减1.
var arrayObj = new Array(); //权限数组
function buildPermissionStr(obj){
var name =obj.name;
var mail = name.split("=")[0];
var perm = name.split("=")[1];
if(obj.checked){
if(perm == 'S'){
document.getElementById(mail).style.display="";
//根据名称得到复选框数组,清空选择
var arr = document.getElementsByName(mail);
for (i=0; i<arr.length;i++) {
arr[i].checked = false;
}
}
}else{
if(perm == 'S'){
document.getElementById(mail).style.display="none";
//因为上面提供的删除方法,每次删除后,数组对象长度减一,所以这里先保存数组长度,然后,根据查找得到的元素索引,删除,这样可以保证删除完整。
var sum = arrayObj2.length;
for(var i=0;i<sum;i++){
var ex = isMailExist(mail);
if(ex >-1)
arrayObj2.remove(ex);
}
}
}
//数组添加对象时,先判断是否包含
var exist = isExist(name);
if(obj.checked){
if(exist<0){ //数组不包含元素
arrayObj.push(name);
}
}else{
if(exist>=0){ //数组包含元素
arrayObj.remove(exist);
}
}
}
//遍历数组,如果包含传入的字符传,返回元素索引
function isMailExist(email){
var index ;
if(arrayObj2.length ==0){
return -1;
}
for(var i=0;i<arrayObj2.length;i++){
if(arrayObj2[i].indexOf(email)>=0)
return i;
}
return -1;
}
//遍历数组,根据字符串的值得到索引
function isExist(emailAddr){
var index ;
if(arrayObj.length ==0){
return -1;
}
for(var i=0;i<arrayObj.length;i++){
if(emailAddr == arrayObj[i])
return i;
}
return -1;
}
//提交时,对于数组对象进行操作,sort为排序,join转换为字符串
function validate(obj){
var sortArray = arrayObj.sort();
var strArray = arrayObj2.join();
for(var i=0;i<sortArray.length;i++){
var mail =sortArray[i].split("=")[0];
var perm = sortArray[i].split("=")[1];
if(perm == 'S'){
if(strArray.indexOf(mail)<0){
alert(mail+"选择了发送权限,但是没有选择白名单!");
return false;
}
}
}
var permisions = document.getElementById("${group.permisions.key}");
var whiteListIds = document.getElementById("${group.whiteListIds.key}");
permisions.value = arrayObj.sort().join();
if(permisions.value==""){
alert("请选择系统邮件和邮件白名单!");
return false;
}
obj.style.display="none";
document.getElementById("hid_sub").style.display="";
return true;
}
最后也需要注意字符串对象的一些公共方法,indexOf(得到穿入字符串在本字符串中的开始位置),split(根据特定符号拆分),==(是否相等)。