Ajax et de Prévention de la Double “soumettre”
J'ai affaire à un héritage de l'application, où ils [a] tags pour de nombreux Ajax formulaire de "soumet".
Si nous étions à l'aide de [entrée] les boutons pourriez tout simplement la désactiver l'attribut de l' [entrée] de la balise.
Mais sur les liens hypertexte de désactiver ne fait pas partie de la spécification et n'est pas compatible multi-navigateur.
Nous sommes à la recherche pour une solution simple pour bloquer les extra clique sur un lien hypertexte.
Remarque: nous sommes à l'aide de JavaScript avec jQuery
- Cela a fonctionné pour moi.
stackoverflow.com/questions/16777003/... - radztech, cool méthode pour le faire. merci pour le heads up
Vous devez vous connecter pour publier un commentaire.
womp de la solution est un très très approfondie de la façon d'aller à ce sujet.
Toutefois, si vous voulez quelque chose d'un peu plus simple, je serais probablement de mettre en œuvre un sémaphore. Sélectionnez simplement un "présentation" du pavillon, et de tester pour voir si le sémaphore est établi lorsque l'utilisateur clique sur le lien. Vous pouvez le faire en mettant le drapeau sur le DOM objet lui-même, ou utiliser une approche globale de type boolean.
Je n'ai évidemment raccourcissement de l' $.appel ajax, mais je pense que vous obtenez le point.
Edit: Euh... en fait, j'ai oublié la partie la plus importante. Le if (!l'envoi).
self.submitting
état dans la réponse, vous pourriez simplifier le rappel crochet:$.ajax({ complete: function() { self.submitting = false; } });
if (!this.submitting)
etthis.submitting = true;
. C'est un exemple classique de la façon de ne pas mettre en œuvre sémaphore 😉Dans votre "cliquez sur" gestionnaire de retour de falsification ou de prévenir par défaut -
Hmm... pour autoriser uniquement le bouton à presser une fois (tout au long de la durée de vie de la page), puis peut-être utiliser .de données() -
http://api.jquery.com/data/
Ou passer un attribut.
J'aime Ben Nadel du routine pour la manipulation de ce.
Essentiellement, vous créer un wrapper autour de jQuery .ajax fonction, et vous pouvez construire toutes sortes de choses qui se passent pour chaque requête ajax dans votre application. Une de ces choses est le suivi des demandes.
Vous verrez que, dans son
getJSON
wrapper méthode, il faut une option de paramètre "name" par le nom de demande. Cela peut être n'importe quoi, c'est juste une clé pour identifier d'où provient la demande de. Dans votre cas, il serait fourni par chaque lien cliquez sur. Si le nom du paramètre existe, puis il les stocke dans un suivi de la collecte.Si un autre appel arrive avec le même nom de demande, il est tout simplement abandonné. Une fois la demande initiale se retourne, il efface le suivi de l'indicateur de la demande nom.
Cette méthode est idéal pour l'extension d'un lot de fonctionnalités communes à toutes les requêtes ajax dans votre application. J'ai créé une demande multiple gestionnaire qui vous permet également de spécifier le comportement de nouvelles demandes - de savoir s'il devrait abandonner toute existants ou tout simplement être supprimée. Ceci est utile lorsque vous voulez la dernière demande soit traitée, comme pour les auto-complété.
Ce qui arrive quand cette liens faut-il faire une requête ajax? Si oui, vous pourriez regarder cette
http://www.protofunc.com/scripts/jquery/ajaxManager3/ (pas de leur est de 3,05 version du référentiel vous voudrez peut-être prendre).
Cela a une option pour arrêter de dupliquer des requêtes ajax.
Également vous pouvez regarder
http://jquery.malsup.com/block/
Il clique sur le lien et un chargement signe apparaît et il n'est plus à cliquer sur ce lien.
Pour tous les événements qui déclenchent appel ajax, C'est une bonne toujours pratiquer à ajouter un chargement couche sur le composant parent ou sur toute la page à la première main afin de prévenir de nouveaux cas de déclenchement et à l'autre de la main pour indiquer à l'utilisateur qu'un chargement de données est en cours.
Vous pouvez le faire en utilisant jQuery Plugin BlockUI, par exemple, qui est très simple à mettre en œuvre
Je pense que c'est le travail. Je remarque d'ailleurs le Navigateur IE réponse lentement lors de l'utilisation d'ajax.