2012-02-20 109 views
1

编辑最终:OMG,我终于找出了什么出错!我几乎不能相信,我正在测试这个8小时不停,最后......我仍然不确定什么,怎么样,为什么,但似乎由于某种原因(我认为)我不能对于重新变量有不同的值,因为有不同的字段,1次,它是一个文本,另一次是一个数字,例如,如果我为每个可能的正则表达式定义不同的变量而不是重新定义它,那里没问题! o.OjQuery,表单验证,验证每个字段后的消息

我已经发布,我现在使用的回复下,这个帖子

感谢这么多的人有花一些时间阅读和思考这个代码!

如果有人对它出错的想法,我很感兴趣!


原题:

找不到逻辑,为什么这不会工作..我有,我想验证,每个字段应该验证的onblur形式:完美的作品,在提交应验证每个字段:工作完美,当出现某种错误时,它应该显示一条消息并返回false:不起作用。由于某种原因,提交函数不希望在.each之后执行任何操作,它甚至不会工作当我没有做任何错误检查,只想在每个.each后警告。

编辑:在提及一些小错误之后,它不幸仍然不会工作..这里是总代码,包括检查字段功能(错误信息在荷兰语,如果你想知道;))

编辑2:经过更多的测试,似乎它不是因为checkform函数,但与正则表达式测试(如果(!re.test(fieldvalue)))得到的代码卡住..不能找到问题虽然..任何想法将不胜感激!

编辑3:为什么不会与正则表达式的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-_.][email protected][\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;} 

    }) 
}); 

新的代码!

如果有人喜欢用一个简单的表单验证,随时;)(空格不完全不错,但那是怎么一回事,因为我的代码编辑器具有比本网站不同的规则。)

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-_.][email protected][\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; 

}) 
}); 
+0

不应该停止工作的警报,但你有错误那里与错误= +1而不是errs + = 1。 – 2012-02-20 13:26:55

回答

0

看起来像你需要周围的+开关和=你的。每()

if (!checkfield(this)) errs += 1; 
+0

啊是的,有点小错误,没有得到它的测试,因为它不是原因它不起作用,但谢谢! – 2012-02-20 13:33:45

0

布拉德·福尔克指出,你应该使用errs += 1而非errs =+1。但是,还有一些其他错误。

您在调用.each()之后缺少分号。这是我能看到的唯一可能导致你的问题。

除此之外,您的return false不是if语句块的一部分,所以即使没有验证错误,它也会始终阻止表单提交 - 这可能是您想要的,但是因为我无法看到任何有关AJAX帖子的证据都可能导致您未来的问题。

+0

谢谢,有点马虎我,想测试没有测试的回报,忘了但它回来了,还请你照顾你提到的其他错误,不能让它工作,但..也许它是在检查字段后所有,我将用代码 – 2012-02-20 13:54:46

+0

更新我的问题首先要检查的是,您没有在浏览器中显示任何Javascript错误。如果您使用的是Firefox,但您还没有安装它,我建议安装Firebug。 – 2012-02-20 13:56:37

+0

谢谢,我在html和css上使用它,从来没有使用它的JavaScript,不知道如何,但我会在网上寻找教程:) – 2012-02-20 14:12:31