Bonjour à tous,
J'utilise LiveValidation pour rendre mes formulaires un peu interactif. En synthétique, lorsqu'un champ perd l'activité (onBlur) alors on teste le champ. Pour tester, livevalidation fait comme ceci :
Donc si validationFunction génère une exception, alors le champ n'est pas validé et il apparait un joli message rouge à coté de celui ci.
Mon problème est dans ma propre fonction de validation, ici validationFunction :
(J'utilise Prototype pour le new Ajax.request)
Voila l'idée :
- Je défini une variable globale isValid.
- Lorsque ma fonction est appelée, je lance une requete AJAX avec prototype, et lorsqu'il recoit le résultat, il exécute onSuccess, qui met isValid à false.
- Ensuite lorsque ma fonction reprend la main, je lance une exception si isValid est à false.
Le problème est que isValid est toujours à true lorsque je le teste à la fin de ma fonction.
Si je met des alert(isValid) un peu partout, il vaut :
- true en début de validationFunction
- true en début de onSuccess
- false en fin de onSuccess
- __true__ en fin de validationFunction !
J'avoue ne pas comprendre un tel comportement, c'est une variable globale oui ou non ?
(note : je ne lance pas l'exception directement depuis onSuccess parce qu'elle doit se faire intercepter par l'objet Ajax.request lui même, en tout cas livevalidation ne la voit pas passer et considère mon champ comme ok)
Voila j'espère que c'est pas trop confus. Je ne vois pas du tout de solution c'est pourquoi je fais appel à vous ! En fait tout ce que je veux c'est transmettre le résultat ajax de onSuccess à ma fonction validationFunction pour pouvoir déclencher mon exception tranquillement.
Merci !
(aucun rapport, on peut pas prévisualiser les messages lorsqu'on post un nouveau sujet, c'est dommage !)
edit : réglé, petite erreur de synchronisme assez étrange mais bon..
Modifié par winzou (04 Nov 2008 - 23:29)
J'utilise LiveValidation pour rendre mes formulaires un peu interactif. En synthétique, lorsqu'un champ perd l'activité (onBlur) alors on teste le champ. Pour tester, livevalidation fait comme ceci :
try{
validationFunction(value, validationParamsObj);
} catch(error) {
if(error instanceof Validate.Error){ ... }
}
Donc si validationFunction génère une exception, alors le champ n'est pas validé et il apparait un joli message rouge à coté de celui ci.
Mon problème est dans ma propre fonction de validation, ici validationFunction :
var isValid = true;
validationFunction: function(value, paramsObj){
new Ajax.Request('ajax-autocomplete_test.xml?type=' + encodeURIComponent(paramsObj.type) + '&autocomplete=' + encodeURIComponent(value), {
method: 'get',
//asynchronous: false,
onSuccess: function(rep)
{
if( rep.responseText != 1 ) { isValid = false; }
}
});
if( ! isValid ) throw new Validate.Error('pas bien !');
}
(J'utilise Prototype pour le new Ajax.request)
Voila l'idée :
- Je défini une variable globale isValid.
- Lorsque ma fonction est appelée, je lance une requete AJAX avec prototype, et lorsqu'il recoit le résultat, il exécute onSuccess, qui met isValid à false.
- Ensuite lorsque ma fonction reprend la main, je lance une exception si isValid est à false.
Le problème est que isValid est toujours à true lorsque je le teste à la fin de ma fonction.
Si je met des alert(isValid) un peu partout, il vaut :
- true en début de validationFunction
- true en début de onSuccess
- false en fin de onSuccess
- __true__ en fin de validationFunction !
J'avoue ne pas comprendre un tel comportement, c'est une variable globale oui ou non ?
(note : je ne lance pas l'exception directement depuis onSuccess parce qu'elle doit se faire intercepter par l'objet Ajax.request lui même, en tout cas livevalidation ne la voit pas passer et considère mon champ comme ok)
Voila j'espère que c'est pas trop confus. Je ne vois pas du tout de solution c'est pourquoi je fais appel à vous ! En fait tout ce que je veux c'est transmettre le résultat ajax de onSuccess à ma fonction validationFunction pour pouvoir déclencher mon exception tranquillement.
Merci !
(aucun rapport, on peut pas prévisualiser les messages lorsqu'on post un nouveau sujet, c'est dommage !)
edit : réglé, petite erreur de synchronisme assez étrange mais bon..
Modifié par winzou (04 Nov 2008 - 23:29)