jQuery、表单验证、验证后的消息。每个字段

jQuery、表单验证、验证后的消息。每个字段,jquery,forms,validation,each,Jquery,Forms,Validation,Each,编辑最终版本:天哪,我终于发现哪里出了问题!!我简直不敢相信,我正在不停地测试这件作品8个小时,最后。。。。。。我仍然不确定是什么、如何以及为什么,但似乎出于某种原因(我认为)我不能为re变量提供不同的值,因为有不同的字段,1次,它代表文本,另一次代表数字,例如,如果我只是为每个可能的正则表达式定义不同的变量,而不是重新定义它,没问题!o、 o 我已经在这篇文章的回复中发布了我现在使用的代码 非常感谢所有花时间阅读和思考这个问题的人 如果有人知道为什么会出错,我很感兴趣 原始问题: 我找不到为

编辑最终版本:天哪,我终于发现哪里出了问题!!我简直不敢相信,我正在不停地测试这件作品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;