为了提交web页面开发效率,自己封装了一套web页面输入框验证方法:
1、首先是ArrayList对象
该ArrayList对象和java中ArrayList对象用法基本一样,包含了java中ArrayList中大部分方法,为存取对象提供了便利。
/********************************************************** * JavaScript实现的ArrayList类 * * @author {yangl} * @version $Revision: 0.5 $ $Date: 2008/04/02 15:00:00 $ * @description * Method: * add(element); * addElementAt(index, element); * contains(element); * get(index); * isEmpty(index); * indexOf(element); * lastIndexOf(element); * remove() * setElementAt(index, element); * size(); * toString(); * @example * var arrList = new ArrayList(); * //var arrList = new ArrayList(10); * arrList.add("000"); * arrList.add("001"); * arrList.add("002"); * *********************************************************/ // JavaScript ArrayList /** Method: add(element); addElementAt(index, element); contains(element); get(index); isEmpty(index); indexOf(element); lastIndexOf(element); remove(index); setElementAt(index, element); size(); toString(); */ /** Example: var arrList = new ArrayList(); //var arrList = new ArrayList(10); arrList.add("000"); arrList.add("001"); arrList.add("002"); */ var ArrayList = function () { var args = ArrayList.arguments; var initialCapacity = 10; if (args != null && args.length > 0) { initialCapacity = args[0]; } var elementData = new Array(initialCapacity); var elementCount = 0; this.size = function () { return elementCount; }; this.add = function (element) { //alert("add"); ensureCapacity(elementCount + 1); elementData[elementCount++] = element; return true; }; this.addElementAt = function (index, element) { //alert("addElementAt"); if (index > elementCount || index < 0) { alert("IndexOutOfBoundsException, Index: " + index + ", Size: " + elementCount); return; //throw (new Error(-1,"IndexOutOfBoundsException, Index: "+index+", Size: " + elementCount)); } ensureCapacity(elementCount + 1); for (var i = elementCount + 1; i > index; i--) { elementData[i] = elementData[i - 1]; } elementData[index] = element; elementCount++; }; this.setElementAt = function (index, element) { //alert("setElementAt"); if (index > elementCount || index < 0) { alert("IndexOutOfBoundsException, Index: " + index + ", Size: " + elementCount); return; //throw (new Error(-1,"IndexOutOfBoundsException, Index: "+index+", Size: " + elementCount)); } elementData[index] = element; }; this.toString = function () { //alert("toString()"); var str = "{"; for (var i = 0; i < elementCount; i++) { if (i > 0) { str += ","; } str += elementData[i]; } str += "}"; return str; }; this.get = function (index) { //alert("elementAt"); if (index >= elementCount) { alert("ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount); return; //throw ( new Error( -1,"ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount ) ); } return elementData[index]; }; this.remove = function (index) { if (index >= elementCount) { alert("ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount); //return; throw (new Error(-1, "ArrayIndexOutOfBoundsException, " + index + " >= " + elementCount)); } var oldData = elementData[index]; for (var i = index; i < elementCount - 1; i++) { elementData[i] = elementData[i + 1]; } elementData[elementCount - 1] = null; elementCount--; return oldData; }; this.isEmpty = function () { return elementCount == 0; }; this.indexOf = function (elem) { //alert("indexOf"); for (var i = 0; i < elementCount; i++) { if (elementData[i] == elem) { return i; } } return -1; }; this.lastIndexOf = function (elem) { for (var i = elementCount - 1; i >= 0; i--) { if (elementData[i] == elem) { return i; } } return -1; }; this.contains = function (elem) { return this.indexOf(elem) >= 0; }; function ensureCapacity(minCapacity) { var oldCapacity = elementData.length; if (minCapacity > oldCapacity) { var oldData = elementData; var newCapacity = parseInt((oldCapacity * 3) / 2 + 1); if (newCapacity < minCapacity) { newCapacity = minCapacity; } elementData = new Array(newCapacity); for (var i = 0; i < oldCapacity; i++) { elementData[i] = oldData[i]; } } } };
?2、测试类
为了提高编程的灵活性,将每种检测情况封装成一个一个小测试类,比如是否可以为空,字符长度等,且每个测试类中必须有一个方法test用于检测输入框数据是否满足条件,满足返回1,否则返回0。
例如输入框不能为空:
/********************************************************** * 输入框不可以为空 * @param lable lable名称 * @param input 输入框name * @returns **********************************************************/ function NoNullCellTest(lable, input){ this.lableName = lable; this.inputName = input; this.test = function(){ var inputObj = document.getElementsByName(this.inputName)[0]; var str = inputObj.value; if(str == ''){ alert(this.lableName+"不可以为空!"); inputObj.focus(); return 0; } return 1; }; }
?3、主测试对象
主测试对象是运用责任链模式,可以将各种测试类对象串联起来,便于检测输入框是否满足特定条件
?
/********************************************************** * 主测试对象(责任链模式) * 通过addTest方法将单元测试对象添加到列表中 * test方法开始检测 * @returns **********************************************************/ function MainTest(){ this.arrList = new ArrayList(); this.addTest=function(cellTest){ this.arrList.add(cellTest); return this; }; this.test=function(){ for(var i = 0; i < this.arrList.size(); i++){ var test = this.arrList.get(i); var returnValue = test.test(); if(returnValue == 0){ return 0; } } return 1; }; }
?
4、实例
如果页面姓名输入框要求满足不能为空、只能长度为3~4个汉字
//姓名检测 var nameNoNullTest = new NoNullCellTest("姓名","userVo.string(name)"); var nameLengthTest = new LengthCellTest("姓名","userVo.string(name)",2,8); var nameChineseTest = new ChineseCellTest("姓名","userVo.string(name)"); var nameMainTest = new MainTest(); nameMainTest.addTest(nameNoNullTest).addTest(nameLengthTest).addTest(nameChineseTest); //姓名检测 function nameTest(){ nameMainTest.test(); }
??
1 楼
wangmuchang
昨天

