FormValid0.5版本发布,带ajax自定义验证例子

最新更新修改了当input元件name有包含[],把焦点移到元件上时会出现JS错误,只有IE是这种情况,没找到很好的解决办法,我只是把这种情况给排除了,就是当元件name有包含[]不把焦点移上去,哪果有好的解决办法请联系我。

  并作了 demo8 - 结合jquery实现ajax自定义验证

  下载:formvalid.zip

复制代码 代码如下:

  /*

  * Copyright (c) 2006-2008 coderhome.net

  * All rights reserved.

  * Support : 志凡([email protected])

  *

  * Version :  0.5

  */

  var FormValid = function(frm) {

  this.frm = frm;

  this.errMsg = new Array();

  this.errName = new Array();

  this.required = function(inputObj) {

  if (typeof(inputObj) == "undefined" || inputObj.value.trim() == "") {

  return false;

  }

  return true;

  }

  this.eqaul = function(inputObj, formElements) {

  var fstObj = inputObj;

  var sndObj = formElements[inputObj.getAttribute('eqaulName')];

  if (fstObj != null && sndObj != null) {

  if (fstObj.value != sndObj.value) {

  return false;

  }

  }

  return true;

  }

  this.gt = function(inputObj, formElements) {

  var fstObj = inputObj;

  var sndObj = formElements[inputObj.getAttribute('eqaulName')];

  if (fstObj != null && sndObj != null && fstObj.value.trim()!='' && sndObj.value.trim()!='') {

  if (fstObj.value <= sndObj.value) {

  return false;

  }

  }

  return true;

  }

  this.compare = function(inputObj, formElements) {

  var fstObj = inputObj;

  var sndObj = formElements[inputObj.getAttribute('objectName')];

  if (fstObj != null && sndObj != null && fstObj.value.trim()!='' && sndObj.value.trim()!='') {

  if (!eval('fstObj.value' + inputObj.getAttribute('operate') + 'sndObj.value')) {

  return false;

  }

  }

  return true;

  }

  this.limit = function (inputObj) {

  var len = inputObj.value.length;

  if (len) {

  var minv = inputObj.getAttribute('min');

  var maxv = inputObj.getAttribute('max');

  minv = minv || 0;

  maxv = maxv || Number.MAX_VALUE;

  return minv <= len && len <= maxv;

  }

  return true;

  }

  this.range = function (inputObj) {

  var val = parseInt(inputObj.value);

  if (inputObj.value) {

  var minv = inputObj.getAttribute('min');

  var maxv = inputObj.getAttribute('max');

  minv = minv || 0;

  maxv = maxv || Number.MAX_VALUE;

  return minv <= val && val <= maxv;

  }

  return true;

  }

  this.requireChecked = function (inputObj) {

  var minv = inputObj.getAttribute('min');

  var maxv = inputObj.getAttribute('max');

  minv = minv || 1;

  maxv = maxv || Number.MAX_VALUE;

  var checked = 0;

  var groups = document.getElementsByName(inputObj.name);

  for(var i=0;i<groups.length;i++) {

  if(groups[i].checked) checked++;

  }

  return minv <= checked && checked <= maxv;

  }

  this.filter = function (inputObj) {

  var value = inputObj.value;

  var allow = inputObj.getAttribute('allow');

  if (value.trim()) {

  return new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g, allow.split(/\s*,\s*/).join("|")), "gi").test(value);

  }

  return true;

  }

  this.isNo = function (inputObj) {

  var value = inputObj.value;

  var noValue = inputObj.getAttribute('noValue');

  return value!=noValue;

  }

  this.checkReg = function(inputObj, reg, msg) {

  inputObj.value = inputObj.value.trim();

  if (inputObj.value == '') {

  return;

  } else {

  if (!reg.test(inputObj.value)) {

  this.addErrorMsg(inputObj.name,msg);

  }

  }

  }

  this.passed = function() {

  if (this.errMsg.length > 0) {

  FormValid.showError(this.errMsg,this.errName,this.frm.name);

  if (this.errName[0].indexOf('[')==-1) {

  frt = document.getElementsByName(this.errName[0])[0];

  if (frt.type!='radio' && frt.type!='checkbox') {

  frt.focus();

  }

  }

  return false;

  } else {

  return FormValid.succeed();

  }

  }

  this.addErrorMsg = function(name,str) {

  this.errMsg.push(str);

  this.errName.push(name);

  }

  this.addAllName = function(name) {

  FormValid.allName.push(name);

  }

  }

  FormValid.allName = new Array();

  FormValid.showError = function(errMsg) {

  var msg = "";

  for (i = 0; i < errMsg.length; i++) {

  msg += "- " + errMsg[i] + "\n";

  }

  alert(msg);

  }

  FormValid.succeed = function () {

  return true;

  }

  function validator(frm) {

  var formElements = frm.elements;

  var fv = new FormValid(frm);

  for (var i=0; i<formElements.length;i++) {

  var validType = formElements[i].getAttribute('valid');

  var errorMsg = formElements[i].getAttribute('errmsg');

  if (!errorMsg) {

  errorMsg = '';

  }

  if (validType==null) continue;

  fv.addAllName(formElements[i].name);

  var vts = validType.split('|');

  var ems = errorMsg.split('|');

  for (var j=0; j<vts.length; j++) {

  var curValidType = vts[j];

  var curErrorMsg = ems[j];

  switch (curValidType) {

  case 'isNumber':

  case 'isEmail':

  case 'isPhone':

  case 'isMobile':

  case 'isIdCard':

  case 'isMoney':

  case 'isZip':

  case 'isQQ':

  case 'isInt':

  case 'isEnglish':

  case 'isChinese':

  case 'isUrl':

  case 'isDate':

  case 'isTime':

  fv.checkReg(formElements[i],RegExps[curValidType],curErrorMsg);

  break;

  case 'regexp':

  fv.checkReg(formElements[i],new RegExp(formElements[i].getAttribute('regexp'),"g"),curErrorMsg);

  break;

  case 'custom':

  if (!eval(formElements[i].getAttribute('custom')+'(formElements[i],formElements)')) {

  fv.addErrorMsg(formElements[i].name,curErrorMsg);

  }

  break;

  default :

  if (!eval('fv.'+curValidType+'(formElements[i],formElements)')) {

  fv.addErrorMsg(formElements[i].name,curErrorMsg);

  }

  break;

  }

  }

  }

  return fv.passed();

  }

  String.prototype.trim = function() {

  return this.replace(/^\s*|\s*$/g, "");

  }

  var RegExps = function(){};

  RegExps.isNumber = /^[-\+]?\d+(\.\d+)?$/;

  RegExps.isEmail = /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/;

  RegExps.isPhone = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/;

  RegExps.isMobile = /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/;

  RegExps.isIdCard = /(^\d{15}$)|(^\d{17}[0-9Xx]$)/;

  RegExps.isMoney = /^\d+(\.\d+)?$/;

  RegExps.isZip = /^[1-9]\d{5}$/;

  RegExps.isQQ = /^[1-9]\d{4,10}$/;

  RegExps.isInt = /^[-\+]?\d+$/;

  RegExps.isEnglish = /^[A-Za-z]+$/;

  RegExps.isChinese =  /^[\u0391-\uFFE5]+$/;

  RegExps.isUrl = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;

  RegExps.isDate = /^\d{4}-\d{1,2}-\d{1,2}$/;

  RegExps.isTime = /^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}$/;

  本地下载