3

我想使用 Dojo 检查两个密码是否相同。

这是我拥有的 HTML:

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

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

<p>Confirm: <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">Save</div>

</form>

这是我到目前为止的 JavaScript:

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

谢谢你的帮助。我可以在纯 JavaScript 中做到这一点,但我试图找到 Dojo 的方式来做到这一点。

4

3 回答 3

4

这会让你更接近

  • 设置 intermediateChanges=false 保持验证器在每次击键时运行。
  • 验证 dijit 的约束对象被传递给它的验证器。使用它来传递其他密码条目
  • dijit.form.Form 会在其所有子 dijit 提交时自动调用 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>
于 2008-11-23T17:39:31.680 回答
2

更简单的是,使用预先编写的 Dojox 小部件dojox.form.PasswordValidator

http://docs.dojocampus.org/dojox/form/PasswordValidator

它可以满足您开箱即用的所有需求!

于 2010-06-29T12:10:33.553 回答
1

我已经解决了!

Dojo 论坛上的这个页面很有帮助。

我将确认密码的 HTML 更改为:

<p>Confirm: <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();
}

我认为您也可以使用验证器参数来创建正则表达式进行测试,但文档不是很清楚。

于 2008-11-21T12:55:50.113 回答