そこで、Dojo - Using the Dojo JavaScript Library to Build Ajax Applications の例に従って、フォームのユーザー名の検証テキスト ボックス フィールドにサーバー側の検証を追加しました。基本的に、xhrGet リクエストを送信する usernameOnChange 関数を追加しました。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???
}
}