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?
Réponses
Trop de publicités?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");
});
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.
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.
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.