2011-08-26 4 views
1

J'ai forme où avant que j'utilisais simple poste avec <button name="submit" id="register" value="Register">Continue</button>Pourquoi jquery submit ne fonctionne peut-être pas?

que j'ai décidé de changer ce poste à jquery ajax message:

<script type="text/javascript"> 
    $(document).ready(function() { 

     $("#register").click(function() { 

      if (!$("form").valid()) 
       return false; 

      var isContinue = false; 

      $.ajax({ 
       url: "/Validate", 
       type: "POST", 
       dataType: "text", 
       data: { recaptcha_challenge_field: $("input#recaptcha_challenge_field").val(), recaptcha_response_field: $("input#recaptcha_response_field").val() }, 
       cache: false, 
       success: function (data, textStatus, xhr) { 
        isContinue = data === 'true'; 
       }, 
       error: function (xhr, st, err) { 
        alert("Sorry error occured, try again later."); 
       }, 
       complete: function() { 
        alert(isContinue);//i could see that alert 
        if (isContinue) { 
         alert(isContinue); //i could see that alert 
         $("form").submit(); 
         alert(isContinue); //i could see that alert 
        } 
        else { 

         return false; 
        } 
       } 
      }); 
     }); 
    }); 
</script> 
<a class="button" id="register">Continue</a 

Donc, si toutes les validations, y compris capthca passé que quand je cliquer pour soumettre Le bouton et le formulaire ne sont pas affichés sur le serveur. J'ai vérifié la demande avec chrome et opéra network dev tools et ils n'ont pas montré cette action de post, mais selon les alertes que j'ai placé dans javascript le formulaire devrait être posté.

Ensuite, pour le test, j'ai placé un autre bouton de soumission simple et un formulaire de publication, donc pour une raison $("form").submit(); ne voulez pas poster le formulaire.

Peut-être quelqu'un peut-il avoir des idées ce que cela pourrait être?

MISE À JOUR

je commentais le ajax post button quand j'ai essayé simple post button mais la chose est j'avais un autre back button :) qui est à la recherche comme ça:

<button name="submit" class="cancel" id="back" value="Back"> 

si le problème est vraiment avec name="submit", je supprime juste cela et tout fonctionne maintenant. Il faudrait beaucoup de temps pour comprendre que le problème avec name="submit", merci pour l'aide.

+0

JavaScript est désactivé? :) Cela peut vous sembler fou, mais je pense que vous devriez vous assurer que les aspects essentiels de votre site fonctionnent également sans javascript. Cela inclut quelque chose d'aussi basique qu'un poste de formulaire. – Bazzz

Répondre

2

En effet, le bouton que vous avez nommé submit est redéfinissant la méthode submit sur l'élément form, donc au lieu de form.submit étant une fonction qui présente la forme, il est maintenant une référence à l'élément button. La manière la plus simple de résoudre ce problème est de renommer votre élément button.

Il est important de différencier entre $('form').submit() et form.submit(). $('form').submit) est un jQuery method qui n'est pas affectée par le bouton nommé soumettre, mais dans les coulisses, jQuery appelle l'attribut submit sur l'élément réelHTMLForm, qui est affectée par le bouton nommé submit.

Il y a un bug about this sur http://bugs.jquery.com, mais comme décrit ci-dessus, ce n'est pas fait un problème avec jQuery lui-même.

Votre code a un autre problème; vous ne devez pas utiliser $('form') à l'intérieur de votre gestionnaire de clic, car cela crée un objet jQuery à alllll sur votre page; donc vous vérifiez que les formulaires alllll sont valides, et que vous soumettez des formulaires alll. Au lieu de cela, utilisez $(this).closest('form')

+0

il est incroyable, les chars de l'aide – Joper

+0

je sais à ce sujet, que '$ ('form'). Submit()' soumettrait toutes les formes, mais je n'ai constamment qu'une seule forme, mais cela pourrait être un problème si j'avais plus qu'un formulaire à la page droite. – Joper

0

Cette fonction est valide? Il renvoie false, sur submit.

if (!$("form").valid()) 
     return false; 
Questions connexes