2017-06-21 71 views
0

嗨我玩弄jQuery表單驗證器,表單驗證完全正常,問題是當我點擊提交,頁面刷新不是我想要的目標。表單確實發佈了數據進入我的數據庫的數據,這是一件好事。試圖提交表單使用jQuery提交形式驗證與submitHandler

我的JavaScript文件

$().ready(function() { 


$('#registerForm').validate({ 

    rules: { 
     firstname: { 
      required: true, 
      nowhitespace: true, 
      lettersonly: true, 
     }, 
     surname: "required", 
     password: { 
      required: true, 
      minlength: 5, 
      maxlength: 10 
     }, 
     confirm_password: { 
      required: true, 
      minlength: 5, 
      equalTo: "#password1", 
     }, 
     email: { 
      nowhitespace: true, 
     } 

    }, 

    messages: { 
     firstname: { 
      required: 'Please enter a name', 
     }, 
     surname: { 
      required: 'Please enter a surname', 
     }, 
     email: { 
      required: 'Please enter an email address', 
      email: 'Please enter a <em>valid</em> email' 
     }, 
     password: { 
      required: 'Please provide a password', 

     }, 
     confirm_password: { 
      required: 'Please confirm your password', 

     } 

    }, 

    errorElement: 'ul', 
    errorPlacement: function (error, element) { 
     let placement = $(element).data('error'); 
     if (placement) { 
      $(placement).append(error) 
     } else { 
      error.insertAfter(element); 
     } 
    }, 

    submitHandler: function() { 

     postContent(); 
    }, 

}); 

function postContent() { 

    $('#registerForm').on('submit',function() { 

     let that = $(this), 
      url = that.attr('action'), 
      type = that.attr('method'), 
      data = {}; 
     that.find('[name]').each(function (index, value) { 
      let that = $(this), 
       name = that.attr('name'), 
       value = that.val(); 

      data['name'] = value; 
     }); 

     $.ajax({ 
      url: url, 
      type: type, 
      data: data, 
      success: function (response) { 
       console.log(response); 
      } 

     }); 

     return false; 
    }); 
} 

和HTML表單本身

<div id="registerModal" class="modal"> 
<div class="modal-content"> 

    <h4 class="center container">Register</h4> 
    <div class="center" id="error-list"> 
     <ul id="required"></ul> 
     <ul id="password"></ul> 
     <ul id="passwordShort"></ul> 
    </div> 
    <div class="row center"> 
     <form class="col s12" action="account.php" method="post" id="registerForm" novalidate="novalidate"> 
      <div class="row"> 
       <div class="input-field col s12 l6"> 
        <input id="first_name" type="text" class="validate" name="firstname" required> 
        <label for="first_name">First Name *</label> 
       </div> 
       <div class="input-field col s12 l6"> 
        <input id="last_name" type="text" class="validate" name="surname" required> 
        <label for="last_name">Last Name *</label> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="input-field col s12"> 
        <input id="email" type="email" class="validate" name="email" required/> 
        <label for="email">Email *</label> 
       </div> 
      </div> 

      <div class="row"> 
       <div class="input-field col s12"> 
        <input id="password1" type="password" class="validate" name="password" required/> 
        <label for="password">Password *</label> 
        <ul id="passError"></ul> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="input-field col s12"> 
        <input id="confirm_password" type="password" class="validate" name="confirm_password" required/> 
        <label for="email">Confirm Password *</label> 
       </div> 
      </div> 
      <button class="btn waves-effect waves-light" id="register" name="register" type="submit">Register 
       <i class="material-icons right">send</i> 
      </button> 
      <span> </span> 
     </form> 
    </div> 

</div> 
<div class="modal-footer"> 
</div> 

+1

您的「註冊」按鈕具有「type =」submit「屬性,這會導致瀏覽器執行導航。 –

+0

所以你會建議將它改爲type =「button」? –

+0

不是。我沒有任何建議。我只是告訴你你觀察到的行爲的原因。 –

回答

5

要停止形式的默認行爲從刷新你的頁面,你需要添加下面的提交。

$('#registerForm').on('submit',function (e) { 
    e.preventDefault(); 
... 

另一種方法是使用「return false;」這可以防止發生默認事件,並且還可以阻止事件傳播。

$('#registerForm').on('submit',function (e) { 
    return false; 
... 
+0

我曾試過這個!但沒有改變..還有什麼可能是問題馬特。這讓我非常沮喪。 –

+0

我已經添加了一個備用解決方案,是否會爲您返回假工作? – Matt