2013-12-20 57 views
0

我有一個包含兩個密碼字段(密碼,密碼確認)的表單。我需要將他們關於不同值的問題看作是標準的HTML-5彈出消息(請參閱插圖)。 enter image description here 爲此,我已將html5/JS函數setCustomValidity()附加到password2字段。 Form.submin()觸發檢查。但問題是,如果值不同,則消息僅從嘗試#2開始。即初始事件什麼也不做 - 表單不發送數據,但消息也不會出現。如果我重複一遍,它就會出現。 我沒有任何適當的想法爲什麼。你做? 以下是完整的內碼:HTML 5輸入檢查:驗證消息僅通過重複調用出現

<script> 
function validateForm(){ 

    var pass1=document.getElementById('password1'); 
    var pass2=document.getElementById('password2'); 

    var pass1Val=pass1.value; 
    var pass2Val=pass2.value; 

    if(pass1Val&&pass2Val&&(pass1Val!=pass2Val)){ 
     pass2.setCustomValidity("The password confirmation is different to the password value"); 
     return false; 
    }  
} 
</script> 
<form id="user-form" action="#" method="post" enctype="text/plain" onSubmit="return validateForm();"> 
Email:  <input type="email" id="emailField" required="required"> <br> 
Tel:  <input type="tel" id="phoneField" required="required"> <br> 
Password: <input type="password" id="password1" required="required"> <br> 
Password2: <input type="password" id="password2" required="required"><br> <input type="submit" value="Send!"> </form> 
+0

是'submit'還是'button'類型的按鈕? – jplara

+0

提交。我修正了代碼(它在這裏意外地被裁剪了)。 – srgg6701

回答

0

您之前提交不必setCustomValidity上的提交事件。

<form id="user-form" action="#" method="post" enctype="text/plain"> 
Email:  <input type="email" id="emailField" required="required"> <br> 
Tel:  <input type="tel" id="phoneField" required="required"> <br> 
Password: <input type="password" id="password1" required="required"> <br> 
Password2: <input type="password" id="password2" required="required"><br> <input type="submit" value="Send!"> </form> 
<script> 
(function(){ 
if(!document.createElement('input').setCustomValidity){return;} 
var pass1=document.getElementById('password1'); 
var pass2 = document.getElementById('password2'); 
function validateForm(){ 

    var pass1=document.getElementById('password1'); 

    var pass1Val=pass1.value; 
    var pass2Val=pass2.value; 

    if(pass1Val&&pass2Val&&(pass1Val!=pass2Val)){ 
     pass2.setCustomValidity("The password confirmation is different to the password value"); 
    } else { 
     pass2.setCustomValidity(""); 
    } 
} 

if(pass1 && pass2){ 
    pass1.addEventListener('change', validateForm, false); 
    pass2.addEventListener('change', validateForm, false); 

    validateForm(); 
} 
})(); 

</script> 
+0

不幸的是,它不能以這種方式工作。如果密碼不同,表單提交數據(不取消)。你可以在這裏看到你的例子:http://srgg6701.github.io/examples/JS/HTML5_inputs.html 我嘗試修改它,並在我的本地主機達到它阻止發送數據(見上文),但隨後出現消息無論如何,從嘗試#2開始。 – srgg6701

+0

更新時剛添加:else { pass2.setCustomValidity(「」); } –

+0

不,它不會以這種方式工作。您的代碼中有2個錯誤。首先,只調用validateForm()不會阻止表單發送。 – srgg6701