最新のアップデートでは、入力要素名に [] が含まれている場合、その要素にフォーカスを移動すると JS エラーが発生するように修正されました。これは IE の場合にのみ発生します。良い解決策が見つかりませんでした。この状況を除外すると、コンポーネント名に [] が含まれる場合、フォーカスが上に移動しません。良い解決策がある場合は、私に連絡してください。
そして、demo8 を作成しました - jquery と組み合わせて、ajax カスタム検証を実装しました
ダウンロード:
formvalid.zip
/*
* 著作権 (c) 2006-2008 coderhome.net
* すべての権利は留保されています。
* サポート: 志凡(dzjzmj@163.com)
*
* バージョン: 0.5
*/
var FormValid = function(frm) {
これ。 frm = frm;
this.errMsg = new Array();
this.errName = new Array();
this.required = function(inputObj) {
if (typeof(inputObj) == "未定義" || inputObj.value.trim() == "") {
return false;
}
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;
}
}
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;
}
}
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;
}
}
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;
}
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;
}
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 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);
}
true を返します。
}
this.isNo = function (inputObj) {
var value = inputObj.value;
var noValue = inputObj.getAttribute('noValue');
戻り値!=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(名前);
}
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";
}
アラート(メッセージ);
}
FormValid.succeed = function () {
return true;
}
function validator(frm) {
var formElements = frm.elements;
var fv = 新しい FormValid(frm);
for (var i=0; i var validType = formElements[i].getAttribute('valid');
var errorMsg = formElements[i].getAttribute('errmsg');
if (!errorMsg) {
errorMsg = '';
}
if (validType==null) 続行;
fv.addAllName(formElements[i].name);
var vts = validType.split('|');
var ems = errorMsg.split('|');
for (var j=0; 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 'is Chinese':
case 'isUrl':
case 'isDate':
case 'isTime':
fv.checkReg(formElements[i],RegExps[curValid]タイプ]、curErrorMsg);
休憩;
case 'regexp':
fv.checkReg(formElements[i],new RegExp(formElements[i].getAttribute('regexp'),"g"),curErrorMsg);
休憩;
case 'custom':
if (!eval(formElements[i].getAttribute('custom') '(formElements[i],formElements)')) {
fv.addErrorMsg (formElements[i ].name,curErrorMsg);
}
休憩;
default :
if (!eval('fv.' curValidType '(formElements[i],formElements)')) {
fv.addErrorMsg(formElements[i].名前、curErrorMsg);
}
休憩;
}
}
}
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}-))?((0d{2,3})|0d{2,3}-)?[ 1-9]d{6,7}(-d{1,4})?$/;
RegExps.isMobile = /^(((d{2,3}))|(d{3}-))?13d{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.is中国語 = /^[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}sd{1,2}:d{1,2}:d{1,2}$/;
本ダウンロード