Question

J'ai une fonction que j'utilise pour empêcher plusieurs postbacks d'une forme:

var submitted = false;
$(function() {
    $('form').bind('submit', function(e) {
        if (!submitted && CanSubmit(e)) {
            submitted = true;
            return true;
        } else {
            return false;
        }
    });
});

Dans la méthode CanSubmit, je dois interroger le bouton qui a été cliqué pour déterminer si je dois permettre à la soumettre ou non.

Notez que je ne peux pas lier à des événements spécifiques de clic - voir cette question précédente pour plus de détails.

Dans Firefox, je peux utiliser e.originalEvent.explicitOriginalTarget, mais cela ne semble pas être disponible dans IE.

Comment puis-je obtenir cette valeur du paramètre e de manière cross-browser?

Était-ce utile?

La solution

En fait, vous pouvez simplement remplacer $('form').bind('submit' avec $(':submit').bind('click' et votre code fonctionnerait tout aussi bien (et vous pouvez utiliser this pour voir ce qui a été cliqué).

Autres conseils

Utilisez e.target - jQuery normalise pour le navigateur cross la cohérence.

La chose la plus proche que je pouvais trouver pour explicitOriginalTarget était document.activeElement (pour IE) - il est l'élément qui avait mise au point lors de l'événement. Il n'y a pas d'équivalent pour les navigateurs basés webkit. Donc non, il n'y a aucun moyen de navigateur croix réelle de le faire avec seulement l'objet de l'événement.

Pourquoi ne vous déliez pas la fonction d'envoi lorsque vous effectuez une soumettez? Cela garantit qu'une seule soumission:

$(function() {
    $('form').bind('submit', function(event) {
          // regular submit form stuff here
        ...
          // and unbind it
        $('this').unbind(event);       
    });
});

Commander .unbind () sous « Utilisation de l'événement objet "

Ou, comme Matt Boule a souligné dans les commentaires, vous pouvez utiliser .one() , ce qui est équivalent à ce qui précède.

$(function() {
    $('form').one('submit', function(event) {           // <== Only executed once
          // regular submit form stuff here
        ...
    });
});

Si vous avez la $.post() ou la soumission $.get() de la forme liée à de multiples événements / éléments, alors vous devez simplement vous assurer de délier le gestionnaire qui finit par être utilisé à l'intérieur lui-même en utilisant l'objet event, puis dissociées la autres gestionnaires aussi, et vice-versa pour chacun de ces autres gestionnaires. Vous pouvez délie les autres gestionnaires utilisant l'une des quatre méthodes pour les gestionnaires d'événements unbind .

Pourquoi ne pas utiliser la fonction .one, garantit il se déclenche qu'une seule fois.

$(function() {
    $('form').one('submit', function(event) {
      // regular submit form stuff here     
    });
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top