jQuery、表单验证、验证后的消息。每个字段
编辑最终版本:天哪,我终于发现哪里出了问题!!我简直不敢相信,我正在不停地测试这件作品8个小时,最后。。。。。。我仍然不确定是什么、如何以及为什么,但似乎出于某种原因(我认为)我不能为re变量提供不同的值,因为有不同的字段,1次,它代表文本,另一次代表数字,例如,如果我只是为每个可能的正则表达式定义不同的变量,而不是重新定义它,没问题!o、 o 我已经在这篇文章的回复中发布了我现在使用的代码 非常感谢所有花时间阅读和思考这个问题的人 如果有人知道为什么会出错,我很感兴趣jQuery、表单验证、验证后的消息。每个字段,jquery,forms,validation,each,Jquery,Forms,Validation,Each,编辑最终版本:天哪,我终于发现哪里出了问题!!我简直不敢相信,我正在不停地测试这件作品8个小时,最后。。。。。。我仍然不确定是什么、如何以及为什么,但似乎出于某种原因(我认为)我不能为re变量提供不同的值,因为有不同的字段,1次,它代表文本,另一次代表数字,例如,如果我只是为每个可能的正则表达式定义不同的变量,而不是重新定义它,没问题!o、 o 我已经在这篇文章的回复中发布了我现在使用的代码 非常感谢所有花时间阅读和思考这个问题的人 如果有人知道为什么会出错,我很感兴趣 原始问题: 我找不到为
原始问题: 我找不到为什么这行不通的逻辑。。我有一个表单要验证,每个字段都应该在blur:works perfect上验证,提交时应该验证每个字段:works perfect,当出现某种错误时,它应该显示一条消息并返回false:not work。。出于某种原因,submit函数不希望在.each之后执行任何操作,甚至在我不检查错误时它也不起作用,只希望在.each之后发出警报 编辑:在提到一些小错误之后,不幸的是它仍然无法工作。。这是全部代码,包括checkfield函数(如果您不知道,错误消息是荷兰语;) EDIT2:经过更多的测试,似乎不是因为checkform函数,而是由于regex测试(if(!re.test(fieldvalue)))导致代码卡住。。但是我找不到问题。。任何想法都将不胜感激 EDIT3:为什么带有正则表达式的checkfield函数不与.each循环??任何人我真的很绝望
function trim(str){
return str.replace(/^\s+|\s+$/g, '');
}
function checkfield(field){
var output = 'validate' + $(field).attr("name");
var type = $(field).attr("type");
if ($(field).hasClass('required')){var required = 1;}
//set patterns for different types
if (type == 'text') { var re = /^[A-Za-z0-9 -._]+$/;}
if (type == 'number') { var re = /^[\d -.]+$/;}
if (type == 'email') { var re = /^[\w-_.]+@[\w]+\.[\w]*\w\w$/;}
if (type == 'date') { var re = /^[0-3][0-9][\/-][0-1][0-9][\/-](19|20)[0-9][0-9]$/;}
var fieldvalue = trim(field.value); //trim value of input
if (required == 1 && emptyString.test(fieldvalue)) { //is required field filled in? if no, return false
$('#'+output).html('Invullen van onderstaand veld is verplicht!');
field.focus();
return false;
}
else if (fieldvalue != "" && type != '' && !re.test(fieldvalue)) { //input according to pattern? if no: place message, return false
if (type == 'email') {$('#'+output).html('Dit is geen correct e-mailadres!');}
else if (type == 'date') {$('#'+output).html('Dit is geen correcte datum!');}
else {$('#'+output).html('U gebruikt tekens die niet zijn toegestaan!');}
field.focus();
return false;
}
else if (fieldvalue != ""){ //when no error and filled in, empty messagebox, return true
$('#'+output).html('');
return true;
}
else if (required == 0 && fieldvalue == ""){//is empty but not required, empty messagebox, return true
$('#'+output).html('');
document.getElementById(output).innerHTML = '';
return true;
}
}
$(document).ready(function(){
$("#userform input").blur(function(){
checkfield(this);
})
$("#userform").submit(function(){
var errs = 0;
$("#userform input").each(function(){
if (!checkfield(this)) errs +=1;
});
if (errs>0) {alert('one or more fields are not correctly filled in'); return false;}
})
});
有效的新代码 如果有人喜欢使用简单的表单验证,请随意;)(空格不是很好,但那是因为我的代码编辑器与此网站有不同的规则。)
看起来您需要在.each()中切换+和=
正如Brad Falk指出的,您应该使用
errs+=1
,而不是errs=+1
。然而,还有一些其他错误
调用.each()
后缺少分号。这是我能看到的唯一可能导致你的问题的东西
除此之外,您的
return false
不是if
语句块的一部分,因此即使没有验证错误,它也会始终阻止表单提交-这可能是您想要的,但因为我看不到任何AJAX帖子的证据,可能会在将来给您带来问题。不应该停止警报的工作,但是您有一个输入错误,错误为errs=+1,而不是errs+=1。啊,是的,小错误尚未得到测试,因为这不是警报无法工作的原因,但谢谢!谢谢,我有点马虎,想在没有测试的情况下测试退货,但忘了将其退回,同时还要处理您提到的其他错误,但不能让它工作。。也许它毕竟在checkfield中,我将用total code更新我的问题首先要检查的是浏览器中没有显示任何Javascript错误。如果您使用的是Firefox,而您还没有Firefox,我建议您安装Firebug。谢谢,我在html和css上使用Firebug,从来没有在javascript上使用过它,现在还不知道如何使用它,但我会在web上查找教程:)您能告诉我为什么这个循环不能与regext测试一起使用吗?它适用于1个现场测试,但在循环中出错。@davidvanidepen您是否有可能编辑问题,使其包含一些HTML以与Javascript代码一起使用?
function trim(str){
return str.replace(/^\s+|\s+$/g, '');
}
function checkfield(field){
var output = 'validate' + $(field).attr("name");
var type = $(field).attr("type");
if ($(field).hasClass('required')){var required = 1;}
var re_text = /^[A-Za-z0-9 -._]+$/;
var re_number = /^[\d -.]+$/;
var re_email = /^[\w-_.]+@[\w]+\.[\w]*\w\w$/;
var re_date = /^[0-3][0-9][\/-][0-1][0-9][\/-](19|20)[0-9][0-9]$/;
var emptyString = /^\s*$/ ;
var error = 0;
var fieldvalue = trim(field.value); //trim value of input
if (required == 1 && emptyString.test(fieldvalue)) { //is required field filled in? if no, return false
$('#'+output).html('Invullen van onderstaand veld is verplicht!');
field.focus();
return false;
}
else if (!emptyString.test(fieldvalue)){
if (type == 'text'){
if (!re_text.test(fieldvalue)) {
$('#'+output).html('U gebruikt tekens die niet zijn toegestaan!');
error = 1;
field.focus();
return false;
}
else {$('#'+output).html(''); return true; }
}
if (type == 'number'){
if (!re_number.test(fieldvalue)) {
$('#'+output).html('U gebruikt tekens die niet zijn toegestaan!');
error = 1;
field.focus();
return false;
}
else {$('#'+output).html(''); return true; }
}
if (type == 'email'){
if (!re_email.test(fieldvalue)) {
$('#'+output).html('Dit is geen correct e-mailadres!');
error = 1;
field.focus();
return false;
}
else {$('#'+output).html(''); return true; }
}
if (type == 'date'){
if (!re_date.test(fieldvalue)) {
$('#'+output).html('Dit is geen correcte datum!');
error = 1;
field.focus();
return false;
}
else {$('#'+output).html(''); return true; }
}
}
else if (required == 0 && emptyString.test(fieldvalue)){//is empty but not required, empty messagebox, return true
$('#'+output).html('');
document.getElementById(output).innerHTML = '';
return true;
}
}
$(document).ready(function(){
$("#userform input").blur(function(){
checkfield(this);
})
$("#userform").submit(function(){
var errs = 0;
$("#userform .form").each(function(){
if (!checkfield(this)) errs +=1;
//checkfield(this);
});
if (errs>0) {alert('one or more fields are not correctly filled in'); return false;}
//alert(errs); return false;
})
});
if (!checkfield(this)) errs += 1;