J'ai donc suivi l'exemple dans Dojo - Utilisation de la bibliothèque JavaScript Dojo pour créer des applications Ajax pour ajouter une validation côté serveur au champ validationtextbox de mon formulaire. Fondamentalement, j'ai ajouté une fonction usernameOnChange qui a soumis une requête xhrGet, le xhrGet renvoie JSON et est géré par le nom d'utilisateurValidationHandler.dojo dijit validation côté client onchange
Cela fonctionne très bien, mais le nom d'utilisateur ValidationHandler ne définit le message d'affichage d'info-bulle qu'une erreur. Il ne définit pas le champ pour être invalide et donc l'utilisateur peut toujours soumettre le formulaire. Comment définir le champ pour qu'il ne soit pas valide afin que le formulaire ne soit pas envoyé?
<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???
}
}
vous pouvez utiliser dojo.connect pour connecter la méthode 'onChange' dans le widget directement à une fonction qui permettrait de préserver le 'ceci ' référence. De cette façon, vous n'auriez pas à faire la recherche d'identifiant et être verrouillé sur une seule instance de widget. – peller