34 votes

Le formulaire de remplacement jQuery ne fonctionne pas lorsque ce dernier est appelé par javascript sur un élément

J'ai une page avec une forme normale avec un bouton d'envoi et une certaine jQuery qui se lie à l'événement de soumission de forme et la remplace par e.preventDefault() et exécute une commande AJAX. Cela fonctionne correctement lorsque vous cliquez sur le bouton de soumission, mais lorsque vous cliquez sur un lien avec onclick='document.formName.submit();' , l'événement n'est pas capturé par le gestionnaire d'événements de soumission de formulaire AJAX. Des idées pourquoi pas ou comment faire en sorte que cela fonctionne sans être lié à tous les éléments?

35voto

stechz Points 381

Quelques suggestions:

  • Écrasez la fonction d'envoi pour faire vos enchères diaboliques
 
    var oldSubmit = form.submit;
    form.submit = function() {
        $(form).trigger("submit");
        oldSubmit.call(form, arguments);
    }
 
  • Pourquoi ne pas lier toutes les balises <a>? Ensuite, vous n'avez pas à appliquer de correctif à un singe, cela pourrait être aussi simple que (en supposant que tous les liens sont à l'intérieur de la balise de formulaire):
 
    $("form a").click(function() {
        $(this).parents().filter("form").trigger("submit");
    });
 

11voto

Eran Galperin Points 49594

Si vous utilisez jQuery, vous devez attacher des événements via son propre mécanisme d’événement et non en utilisant les propriétés "on" (onclick, etc.). Il possède également sa propre méthode de déclenchement d'événement, nommée « déclencheur », que vous devez utiliser pour activer l'événement de soumission de formulaire.

1voto

user16624 Points 165

Merci Eran

J'utilise ce code de liaison d'événement

 this._form.bind('submit', Delegate.create(this, function(e) {
    e.preventDefault();
    this._searchFadeOut();
    this.__onFormSubmit.invoke(this, new ZD.Core.GenericEventArgs(this._dateField.attr('value')));
});
 

mais il y a des codes hérités onclick sur le code HTML et je préférerais ne pas le modifier car il y a tellement de liens.

1voto

Joel Points 11

Cela a fonctionné pour moi:

Créer un bouton factice, masquer le véritable envoi avec le nom submit,

puis:

 $("#mySubmit").click(function(){
    $("#submit").trigger("click"); });
 

définir un gestionnaire d’événements sur votre mannequin pour déclencher un clic sur le bouton de soumission de formulaire. laissez le navigateur déterminer comment soumettre le formulaire ... De cette façon, vous n'avez pas besoin de preventDefault sur le formulaire à soumettre, point de départ du problème.

Cela semblait contourner le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X