2016-05-31 107 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"> 

相关问题