为什么即使出现错误,我的表单也会提交?

时间:2014-02-28 17:28:32

标签: javascript form-submit

起初我有这个并且它工作得很完美但即使出现错误也会提交:

 $(document).ready(function(){
      $('input[name=subdomain]').keyup(subdomain_check);
      $('input[name=password]').keyup(password_strenght);
      $('input[name=c_password]').keyup(password_check);
      $('input[name=email]').keyup(email_check);
  });

所以我把它改成了这个,现在它不会调用里面的函数!

$(document).submit(function(e){
    $('input[name=subdomain]').keyup(subdomain_check);
    $('input[name=password]').keyup(password_strenght);
    $('input[name=c_password]').keyup(password_check);
    $('input[name=email]').keyup(email_check);
    return false;
});

这里有什么问题?
这是整个代码:http://pastie.org/8812743

3 个答案:

答案 0 :(得分:1)

在发生提交事件之前,您没有附加keyup事件处理程序。此时用户已完成所有字段的输入。

将呼叫转移到$(...).keyup(...)回到dom ready事件。您实际上需要一个附加事件处理程序来检查用户输入:

$(document)
    .ready(function(){
        $('input[name=subdomain]').keyup(subdomain_check);
        $('input[name=password]').keyup(password_strenght);
        $('input[name=c_password]').keyup(password_check);
        $('input[name=email]').keyup(email_check);
    })
    .submit(function(e) {
        // validate input
        // if invalid, show error message and call e.preventDefault();
    });

一般用户工作流程为:

  1. 调用jQuery中的domready事件,附加keyup事件处理程序
  2. 用户在表单字段中键入,触发键盘处理程序
  3. 用户提交表单,触发提交处理程序
  4. 提交处理程序验证表单输入,如果无效,则向用户显示错误消息并阻止提交事件继续。

答案 1 :(得分:0)

不知道你的验证函数究竟返回了什么,但是,如果它是一个布尔值你可能只是做这样的事情:

$("#formId").submit(function(e){
    if(!subdomain_check() || !password_strenght() || !password_check() || !email_check()) {
        e.preventDefault();
    }
});

答案 2 :(得分:0)

 $(document).ready(function(){
      $('input[name=subdomain]').keyup(subdomain_check);
      $('input[name=password]').keyup(password_strenght);
      $('input[name=c_password]').keyup(password_check);
      $('input[name=email]').keyup(email_check);

      function subdomain_check (e) {
         // these functions should set a global variable to false if validation fails
      }

      function password_strenght (e) {
         // these functions should set a global variable to false if validation fails
      }

      function password_check (e) {
         // these functions should set a global variable to false if validation fails
      }

      function email_check (e) {
         // these functions should set a global variable to false if validation fails
      }

      $(document).submit(function(e){
          return global_var; // where global_var is the variable set by the validating functions
      }

  });