Таким образом, я последовал примеру в Dojo - Использование библиотеки JavaScript Dojo для сборки Ajax-приложений, чтобы добавить проверку на стороне сервера в поле username validationtextbox в моей форме. В основном я добавил функцию usernameOnChange, которая отправила запрос xhrGet, xhrGet возвращает JSON и обрабатывается usernameValidationHandler.
Отлично работает, но usernameValidationHandler только устанавливает сообщение об ошибке всплывающей подсказки. Поле не устанавливается недействительным, и, таким образом, пользователь все еще может отправить форму. Как установить недопустимое поле, чтобы форма не отправлялась?
<input type="text" id="userName" name="userName" size="20"
dojoType="dijit.form.ValidationTextBox"
trim="true"
required="true"
onChange="userNameOnChange"
regExp="\w+"
invalidMessage="User name is required"
/>
function userNameOnChange() {
var userName = dijit.byId("userName").getValue();
if (userName == "") {
return;
}
dojo.xhrGet( {
url: "validateUserName.jsp?userName=" + userName,
handleAs: "json",
handle: userNameValidationHandler
});
}
function userNameValidationHandler(response) {
dijit.byId("userName").displayMessage();
if (!response.valid) {
var errorMessage = "User name already taken";
// Display error message as tooltip next to field
dijit.byId("userName").displayMessage(errorMessage);
// HOW DO I SET THE FIELD TO BE INVALID NOW???
}
}