2008-11-21 83 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