0

我已經爲不同類型的字符串驗證了輸入的功能。我遇到了一些嚴重的問題。我把它稱爲表格提交和每個輸入更改。我已經寫下了我的代碼,然後調用了函數。問題是:當我在更改頁面時調用它並刷新頁面時,頁面加載時會自動運行更改時的驗證並呈現錯誤。當頁面被加載時,jQuery在更改事件時自動運行功能

var Val = { 
    'string': function(ident, req, regexp, offset, limit) { 
     var ele = $(document.getElementById(ident)); 
     Val.errors = false; 

     if (!ele.val() && req == 1) { 
      alert('blank'); 
      Val.errors = true; 
      $("#" + ident + "Error").html("This field cannot be empty."); 
      $("#" + ident + "Error").show("fast"); 
     }else if ((ele.val().length <= offset || ele.val().length > limit) && Val.errors == false) { 
      alert('not long enough'); 
      Val.errors = true; 
      $("#" + ident + "Error").html("This field must be between " + offset + " & " + limit + " charecters long"); 
      $("#" + ident + "Error").show("fast"); 
     }else if (regexp !== null) { 
     switch (regexp) { 
      case 'text': 
       var regEx = /^([a-zA-Z]+)$/g; 
       break; 
      case 'number': 
       var regEx = /^([0-9]+)$/g; 
       break; 
      case 'email': 
       var regEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/g; 
       break; 
      case 'date': 
       var regEx = /^([123]0|[012][1-9]|31)-(0[1-9]|1[012])-(19[0-9]{2}|2[0-9]{3})$/g; 
       break; 
      case 'alphanum': 
       var regEx = /^([a-zA-Z0-9_\-\.]+)$/g; 
       break; 
      default: 
       break; 
     } 
      if (!regEx.test(ele.val()) && Val.errors == false) { 
       alert('not valid'); 
       Val.errors = true; 
       $("#" + ident + "Error").html("This field is not valid"); 
       $("#" + ident + "Error").show("fast"); 
      } 
     } 
     if (!Val.errors){ 
      $("#" + ident + "Error").hide("fast"); 
     } 
    }, 

    'send': function() { 
     if (!Val.errors) { 
      $('#form').submit(); 
     } 
    } 
} 

調用函數的:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Form Validations</title> 
<script type="text/javascript" language="JavaScript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script type="text/javascript" language="JavaScript" src="js/gcui.lsat.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $('#send').click(function(){ 
     checkEmail(); 
     checkUsername(); 
     Val.send(); 
    }); 

    $('#emailID').change(checkEmail()); 
    $('#username').change(checkUsername()); 


    function checkEmail(){ 
     Val.string('email', 1, 'username', 10, 100); 
    } 
    function checkUsername(){ 
     Val.string('username', 1, 'alphanum', 5, 15); 
    } 
}); 
</script> 
</head> 
<body> 
    <form id="form" action=""> 
     <input type="text" id="email" name="email" title="Email" /> 
     <input type="text" id="username" name="username" title="Username" /> 
     <input type="button" id="send" value="Submit" /> 
    </form> 

    Email: <div id="emailError"></div><br/> 
    Username: <div id="usernameError"></div> 
</body> 
</html> 

回答

4
$('#emailID').change(checkEmail()); 

辦法 「運行checkEmail和返回值傳遞給change方法」

你想:

$('#emailID').change(checkEmail); 

意思是「Pa SS的checkEmail功能將change方法」

+0

函數名後的括號將調用該函數。在這裏,您只需要將該函數作爲參數傳遞給更改方法。編輯:對不起,我想發表評論原來的問題 – naiquevin 2010-12-13 09:59:34

0

在你$( '#發送')。點擊(函數(){你提交兩次。第一次進行驗證時,第二次按下按鈕。添加行返回False; Val.send()後面的;如果表格填寫正確,您只能獲得論壇提交