2013-10-26 23 views
0

我有這樣的形式:是否有一個事件可以在表單提交後和表單經過HTML5驗證之後發生?

<div id="account-form"> 
     <form action="/Account/Login" id="login-form" class="form" method="post"> 
      <div id="input-fields"> 
       <div> 
        <input class="data-entry medium-margin" id="UserName" name="UserName" placeholder="Username (or guest)" required="required " size="25" type="text" value=""> 
       </div> 
       <div> 
        <input class="data-entry medium-margin" id="Password" name="Password" placeholder="Password (or guest)" required="required " size="25" type="password"> 
       </div> 
       <div> 
        <input class="data-entry inline-checkbox" id="RememberMe" name="RememberMe" type="checkbox" value="true"><input name="RememberMe" type="hidden" value="false"> 
        <p style="margin-top: 0;">Remember me?</p> 
       </div> 
      </div> 
      <button class="data-entry medium" id="login" type="submit">Login</button> 
      <button class="data-entry medium" id="register" type="button" onclick="location.href='/Account/Register'">Register</button> 
     </form> 
    </div> 

與此javascript禁用後的形式輸入提交。

<script type="text/javascript"> 
    (function() { 
     document.getElementsByClassName('form')[0] 
      .addEventListener("submit", function() { 
       var inputs = document.getElementsByClassName("data-entry"); 
       for (i = 0; i < inputs.length; i++) { 
        inputs[i].disabled = true; 
       } 
    })(); 
</script> 

當我輸入登錄數據,然後點擊提交輸入被禁止,並提交驗證失敗說,輸入字段不填寫。

有什麼方法可以在HTML5驗證後禁用輸入字段?

回答

1

只是安排回調以0

.addEventListener("submit", function() { 
    setTimeout(function() { 
     var inputs = document.getElementsByClassName("data-entry"); 
     for (i = 0; i < inputs.length; i++) { 
      inputs[i].disabled = true; 
     } 
    }, 0); }); 

這樣一旦submit事件處理已經完成禁用代碼會被執行超時。但是,如果驗證失敗,您將重新啓用字段,否則用戶將無法糾正問題。

+0

感謝您的建議。你提到「一旦提交事件處理已完成」。這是否意味着在服務器返回了對提交的響應或剛提交驗證完成後? – Melina

+0

@Melina:對於常規的「web 1.0」表單,提交的結果實際上會取代當前頁面,因此有關收到響應後會發生什麼的討論是無稽之談(到那時當前世界已經結束)。不知道這是否在規格說明,但看​​着瀏覽器的行爲我懷疑是提交仍然是異步的,你可以在等待回覆時與頁面交互。對於ajax post來說,在提交之後和收到答覆之前立即完成禁用。 – 6502

相關問題