2010-11-12 7 views
0

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; 

     } 

    } 

}); 
+0

Courez-vous cela à l'intérieur d'un gestionnaire 'document.ready'? –

+0

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

Répondre

1

Il est toujours envoyé parce que des erreurs javascript se produisent et que le code n'atteint jamais la déclaration return false ..

Le problème est qu'il n'y a pas de fonction length() pour l'objet jquery. C'est une propriété.

Vous devez modifier les deux .length() en .length dans votre premier if. Vous pouvez également utiliser la méthode .size().

Pour en savoir plus à http://api.jquery.com/length/

+0

Merci - été regardé cette chose toute la journée et n'a pas vu les crochets de retournement! Gah! Paire d'yeux frais et tout ça. Merci. – dartacus

+0

Votre bienvenue @dartacus. –

0

Essayez d'ajouter un 'preventDefault()' ...

jQuery(document.forms[2]).submit(function(evt){ 
    evt.preventDefault(); 
    . 
    . 
    . 

Ensuite, une fois que vous avez terminé une validation et la manipulation, vous pouvez appeler manuellement soumettre de la forme:

$(document.forms[2]).submit(); 
+0

Je vais lui donner un tourbillon ... – dartacus

+0

Le problème réel a été identifié ci-dessus, mais merci beaucoup de proposer une approche différente. J'ai réussi à faire fonctionner cela en utilisant preventDefault, bien que je devais utiliser un contrôle var pour éviter une boucle kill. – dartacus

Questions connexes