2010-02-17 5 views
11

J'ai un lien sur une page Web ouvre un dialogue modal. La première fois que le lien est cliqué le code d'initialisation s'exécute. Les clics suivants ne nécessitent aucun traitement. Le problème ici est que lorsque les gens cliquent deux fois sur le lien, le code d'initialisation s'exécute deux fois, même si je mets un drapeau immédiatement pour dire que je suis initialisé, et si je ne marque pas la fonction init. Que devrais-je faire?Les gens qui double-cliquent tout sur les pages Web ... jQuery double-cliquez sur le problème

  • je pouvais délier la fonction de clic sur ce lien quand on clique dessus, mais je besoin de lier à nouveau la fonction lorsque la boîte de dialogue se ferme.
  • Je pourrais me lier à l'événement dblclick et retourner false?
  • Je pourrais enregistrer l'heure 'lastclicked' sur l'élément, puis vérifier si dire 2 secondes est passé avant de laisser le feu événement?
+2

Ne peut pas vous lier simplement à la dblclick ainsi? Je ne vois pas pourquoi cela ne marcherait pas. –

+0

Problème avec la liaison à dblclick est que si l'utilisateur clique deux fois et je renvoie false - le dialogue ne s'ouvrira pas et l'utilisateur sera laissé wtf ce lien ne fonctionne pas :) Je suppose que je pouvais attendre quelques millisecondes puis déclencher le clic fonctionner manuellement? – superlogical

Répondre

5

J'utilise Ben Nadel's jQuery ajax wrapper. Chaque fois que vous créez une requête ajax, vous pouvez éventuellement lui donner un nom. L'encapsuleur ajax suit toutes les requêtes nommées et supprime les doublons s'il attend toujours une réponse d'une requête précédente portant le même nom.

En passant tous vos appels ajax à travers ce "pipeline", vous avez un grand contrôle centralisé sur la gestion de chaque appel.

+0

Salut womp - merci pour la tête! C'est quelque chose que j'ai lutté avec un peu juste :) Je vais vérifier! – superlogical

0

J'ai fait un plugin pour étendre la méthode jquery ajax et ajouter un drapeau singleton, avec un drapeau de blocage supplémentaire pour dire à ajax d'ignorer tous les appels suivants en utilisant cette URL (ou clé).

Vous appelez ajax normalement supplémentaires {singleton: true, le blocage: true} Options

Lorsque vous appelez le même ajax deux fois le deuxième appel ne se déclenche pas si le premier appel est en cours de traitement. V à portée de main jusqu'à présent:

http://github.com/dougle/jQuery-Ajax-Singleton

+0

Je suppose que je devrais l'essayer :) Mon problème n'a pas vraiment quoi que ce soit à faire avec ajax - il fait beaucoup de trucs de widgets YUI qui est très coûteux. Donc, ouais enveloppant les trucs ajax jQuery est bien si je faisais ajax. Mais dans ce cas, il s'agit d'un double clic. – superlogical

Questions connexes