2016-05-31 106 views
0

你好我有一個簡單的表單來驗證我想做一個客戶端驗證可以說我的表單只有一個字段的名稱我想檢查名稱長度是否在5到20個字符之間如果是的話沒問題,數據將被髮送到服務器,然後應用服務器端驗證;但是,如果不是,那麼錯誤消息將顯示在輸入字段旁邊的範圍內,表示它必須是5到20個字符。問題是當我點擊提交按鈕它顯示的結果不到一秒鐘,然後它會導致提交按鈕重新加載頁面,這也意味着如果我已經包括了我的服務器端驗證,它也將被處理,因爲輸入數據已經發送,所以我怎樣才能停止提交按鈕從發送數據到服務器並重新加載頁面而不禁用按鈕。如何在不禁用JQuery按鈕的情況下停止提交表單?

這裏是我的示例代碼

<!doctype html> 
<html> 
<head> 
    <title>form validation</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 

    <script> 
     $(document).ready(function() { 
      $("#submit").click(function(){ 
       myfunction(); 
      }); 

      function myfunction() 
      { 
       name = $("#user").val(); 
       nameError = $(".error").first(); 
       myError = ""; 
       if(name.length < 5 || name.length > 20) 
        myError += "length should be between 5 and 20 "; 
       else 
        myError += "ok" 

       nameError.html(myError); 

      } 
     }); 
    </script> 

    <style> 
     .error 
     { 
      color : red; 
      text-transform: capitalize; 
      margin-left: 20px; 
     } 
    </style> 
</head> 
<body> 

    <form method="post" action=""> 
     NAME : <input type="text" name="user" id="user"><span class="error"></span><br /> 
     <input type="submit" value="Submit" id="submit"> 
    </form> 

</body> 
</html> 
+0

返回真/從 「myfunction的」 假並檢查按鈕等

回答

2

的問題是你沒有找到一個問題取消表單提交。

爲此,您需要偵聽表單上的提交事件,而不是按鈕上的單擊事件。

嘗試:

 $("form").on('submit', myfunction); //<-- listen for form submit, not button click 

     function myfunction(evt) { //<-- the event object is automatically passed along; 
            // this is key for suppressing submission 
      name = $("#user").val(); 
      nameError = $(".error").first(); 
      myError = ""; 
      if(name.length < 5 || name.length > 20) 
       myError += "length should be between 5 and 20 "; 
      else 
       myError += "ok" 

      if (myError) { 
       evt.preventDefault(); //<-- suppress submission if error found 
       nameError.html(myError); 
      } 

     } 

你可以選擇使用HTML5 validation,讓你的生活變得更輕鬆。

+0

非常感謝您的幫助順便說一句,evt.preventDefault()也會阻止數據被髮送到服務器? –

+0

我有這個作爲服務器端驗證的例子,當我得到兩個好的我的形式它不會運行這個PHP驗證爲什麼 <?php if($ _ SERVER ['REQUEST_METHOD'] =='POST') { $ name = $ _POST ['user']; if(!preg_match(「/^[a-zA-Z] * $ /」,$ name)) echo「name must only contain characters」; 其他 回聲「感謝您提交表單」; } ?> –

+0

它會阻止數據發送到服務器 - 即表單提交 - 只有在出現錯誤時纔會發送。否則,表格將被提交。 – Utkanos

0
$("#submit").click(function(){ 
    if ($('#user').text.length > 4){ 
      myfunction(); 
    }else{ 
    // show error message 
    } 
}); 

試試這個,你就點擊確認沒有在功能

+0

這不會取消表單提交。 – Utkanos

+0

ok .. add(e)作爲函數參數,並放在else - e.preventDefault() – Adrian

0
Try this one.. 



<!doctype html> 
    <html> 
    <head> 
     <title>form validation</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 

     <script> 
      $(document).ready(function() { 


       function myfunction() 
       { 
        name = $("#user").val(); 
        nameError = $(".error").first(); 
        myError = ""; 
        if(name.length < 5 || name.length > 20){ 
         myError += "length should be between 5 and 20 "; 
         return false; 
        } 
        else{ 
         myError += "ok" 

        nameError.html(myError); 
        return true; 
        } 

       } 
      }); 
     </script> 

     <style> 
      .error 
      { 
       color : red; 
       text-transform: capitalize; 
       margin-left: 20px; 
      } 
     </style> 
    </head> 
    <body> 

     <form method="post" action="" onSubmit="return myFunction();"> 
      NAME : <input type="text" name="user" id="user"><span class="error"></span><br /> 
      <input type="submit" value="Submit" id="submit"> 
     </form> 

    </body> 
    </html> 
2

只做一件事情。它是非常easy.Follow我code.There是沒有必要的JavaScript或jQuery.Code是在我的Pc.Hope上測試會喜歡。


<form method="post" action="" > 
    NAME : <input type="text" name="user" pattern="[A-Z a-z.]{5,20}" title="Enter your name between 5 and 20 charecters" required="required" accesskey="U"/><br /> 
    <input type="submit" value="Submit" id="submit"> 

相關問題