Edit: a répondu, était une erreur de syntaxe, voir ci-dessous pour le code fixe ...gestionnaire de soumission de formulaire jQuery - comportement étrange
Salut à tous, lecteur de longue date, d'abord du temps asker.
Le code ci-dessous est toujours permettant la soumission de formulaire, même si j'ai surévalué la valeur de retour à la fin de la fonction, en dehors des instructions conditionnelles. La soumission d'un formulaire n'est autorisée que s'il n'y a RIEN dans le corps de la fonction, sauf retourner false. Profondément étrange.
J'ai vérifié que la fonction est appelée lors de la soumission d'un formulaire en entrant une alerte dans le corps de la fonction et en vérifiant qu'elle m'avertit. J'ai essayé d'extraire le code dans une fonction discrète et de spécifier que, en tant que gestionnaire d'événement, aucune différence. La solution de contournement est probablement de surveiller l'état de mes contrôles et de désactiver/activer le bouton de soumission du formulaire en conséquence, mais il me manque sûrement quelque chose d'évident puisque cette technique fonctionne partout ailleurs.
Quelqu'un a-t-il des idées? Mon google-fu m'a échoué et SO n'a rien à ce sujet que j'ai pu voir (encore). Je suis à la fin de mon esprit. Le contexte pour cela, btw, est FF3, jQuery 1.4.2, et je travaille sur l'installation de mantisbt de mon entreprise. Le html de la forme est complètement normal.
Cheers,
G
jQuery(document.forms[2]).submit(function(){
var canSubmit = true;
var msg = '';
// we only do validation if those controls are present and have some options which can be selected
if(jQuery("select[name=priority] option").length() > 0 && jQuery("select[name=severity] option").length() > 0){
//there must be a selection in priority
if(jQuery("select[name=priority]").val() == ''){
canSubmit = false;
msg = msg + 'Please select a priority!\n';
}
//there must be a selection in severity
if(jQuery("select[name=severity]").val() == ''){
canSubmit = false;
msg = msg + 'Please select a severity!\n';
}
//the priority cannot be P1 or P2 and also a feature request
if(jQuery("select[name=priority]").val() > 49
&& jQuery("select[name=severity]").val() == 60){
canSubmit = false;
msg = msg + 'Feature requests cannot be P1 or P2!';
}
//if there is some feedback, alert it to the user
if(msg != ''){
alert(msg);
}
}
//debugging override - always return false!
return false; //instead of canSubmit;
});
Edit: est ici le code fixe. Merci beaucoup Gaby!
var canSubmit = true;
var msg = '';
// validate form submission
jQuery(document.forms[2]).submit(function(e){
msg = '';
canSubmit = true;
// we only do validation if those controls are present and have some
// options
// which can be selected
if(jQuery("select[name=priority] option").length > 0 &&
jQuery("select[name=severity] option").length > 0){
// there must be a selection in priority
if(jQuery("select[name=priority]").val() == 0){
canSubmit = false;
msg = msg + 'Please select a priority!\n';
}
// there must be a selection in severity
if(jQuery("select[name=severity]").val() == 0){
canSubmit = false;
msg = msg + 'Please select a severity!\n';
}
// the priority cannot be P1 or P2 and also a feature request
if(jQuery("select[name=priority]").val() > 49
&& jQuery("select[name=severity]").val() == 60){
canSubmit = false;
msg = msg + 'Feature requests cannot be P1 or P2!';
}
if(!canSubmit){
// if there is some feedback, alert it to the user
if(msg != ''){
alert("There were some problems:\n" + msg);
}
return false;
}
}
});
Courez-vous cela à l'intérieur d'un gestionnaire 'document.ready'? –
Oui, eh bien, en quelque sorte. document.ready détermine quelle page est affichée et appelle une fonction spécifique à la page. Ce code est dans l'une de ces fonctions. J'ai déterminé que le gestionnaire de soumission est définitivement en cours d'exécution. Cheers, G – dartacus