2008-11-21 84 views
3

我想檢查使用Dojo的兩個密碼是否相同。在dojo的密碼檢查

下面是HTML我有:

<form id="form" action="." dojoType="dijit.form.Form" />

<p>密碼:<input type="password"
name="password1"
id="password1"
dojoType="dijit.form.ValidationTextBox"
required="true"
invalidMessage="Please type a password" /
></p>

<p>確認:<input type="password"
name="password2"
id="password2"
dojoType="dijit.form.ValidationTextBox"
required="true"
invalidMessage="This password doesn't match your first password" /
></p>

<div dojoType="dijit.form.Button" onClick="onSave">保存</div>

</form>

這裏是JavaScript我到目前爲止:

var onSave = function() {
if(dijit.byId('form').validate()) { alert('Good form'); }
else { alert('Bad form'); }
}

感謝您的幫助。我可以在純JavaScript中做到這一點,但我試圖找到Dojo的做法。

回答

4

這將讓你拉近了許多

  • 設置intermediateChanges =假保持在每一次擊鍵運行驗證。
  • 驗證dijit的約束對象被傳遞給它的驗證器。使用它來傳入其他密碼條目
  • dijit.form.Form在提交時會自動調用其所有子節點上的isValid(),如果它們未全部驗證,則會取消提交。我雖然無效的會得到他們的錯誤信息,但他們沒有。這是作爲一個練習讀者;-)

驗證功能:


function confirmPassword(value, constraints) 
{ 
    var isValid = false; 
    if(constraints && constraints.other) { 
     var otherInput = dijit.byId(constraints.other); 
     if(otherInput) { 
      var otherValue = otherInput.value; 
      console.log("%s == %s ?", value, otherValue); 
      isValid = (value == otherValue); 
     } 
    } 
    return isValid; 
} 
function onsubmit() 
{ 
    var p1 = dijit.byId('password1').value; 
    var p2 = dijit.byId('password2').value; 
    return p1 == p2; 
} 

,並輸入對象:


<p>Password: <input type="password" 
    name="password1" 
    id="password1" 
    dojoType="dijit.form.ValidationTextBox" 
    required="true" 
    intermediateChanges=false 
    invalidMessage="Please type a password" /></p> 

<p>Confirm: <input type="password" 
    name="password2" 
    id="password2" 
    dojoType="dijit.form.ValidationTextBox" 
    required="true" 
    constraints="{'other': 'password1'}" 
    validator=confirmPassword 
    intermediateChanges=false 
    invalidMessage="This password doesn't match your first password" /></p> 
1

我已經解決了!

This page on the Dojo forum was helpful。

我改變了HTML的確認密碼:

<p>確認:<input type="password"
name="password2"
id="password2"
dojoType="dijit.form.ValidationTextBox"
required="true"
validator="return theSame(this, dijit.byId('password1'));"
invalidMessage="This password doesn't match your first password" /
></p>

唯一的區別是增加驗證參數。

我創建了以下JavaScript函數:

function(dojoTxt1, dojoTxt2) {
return dojoTxt1.getValue() == dojoTxt2.getValue();
}

我想你也可以使用驗證參數創建正則表達式來測試反對,但documentation不非常清楚。

+0

我認爲Ed的解決方案考慮了多個約束條件,並且是一個更完整的問題解決方案。 – 2009-12-23 18:08:15