Я хочу проверить, что два пароля совпадают с помощью 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.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я решил это!
Этот страница на форуме 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();
}
Я думаю, вы также можете использовать параметр валидатор для создания регулярных выражений для тестирования, но документация не очень понятен.
Ты прав. Я просто не собирался искать, потому что я решил проблему в достаточной мере для своих нужд, когда он ответил на нее.
Это сделает вас намного ближе
функция проверки:
function confirmPassword(value, constraints)
{
var isValid = false;
if (constraints && constraints.other) {
var otherInput = dijit.byId(constraints.other);
if (otherInput) {
var otherValue = otherInput.value;
console.info("%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>
Еще проще использовать предварительно написанный виджет Dojox, dojox.form.PasswordValidator.
http://docs.dojocampus.org/dojox/form/PasswordValidator
Он делает все, что вы хотите, прямо из коробки!
Я думаю, что решение Эда учитывает несколько ограничений и является более полным решением вопроса.