2013-08-14 3 views
0

J'ai le code suivant qui est utilisé pour contrôler une animation flip. Tout fonctionne bien avec un clic normal.Un double-clic rapide provoque le code à l'erreur

Cependant, il semble qu'un double-clic rapide provoque le passage de 2 événements à travers le contrôle booléen qui est censé empêcher ce problème. Dans Console.log, je m'attends à voir 'commencé à courir' pour le premier processus et 'déjà lancé' pour le second clic - au lieu de cela les deux clics semblent se terminer et causer des ravages avec la dernière logique.

Est-ce que quelqu'un voudrait me faire savoir ce que je fais mal et comment éviter ce problème?

Merci,

$('.item').each(function() { 
    var elem = $(this); 
    elem.data('running', false); 

    elem.bind("click",function(event){ 
     event.preventDefault(); 

     if (elem.data('running') == false) { 
      elem.data('running', true); 
      console.log('started running'); 
      //do some stuff 
      elem.data('running', false); 
     } else { 
      console.log('already running'); 
     } 
    }) 
}); 
+1

Pourquoi ne faites-vous pas simplement '$ ('. Item'). Bind ('click', ...)'? Vous n'avez pas besoin d'une boucle horrible alors, et vous pouvez référencer l'élément cliqué avec '$ (this)' – Bojangles

+0

Je voudrais pouvoir vous donner le point - Je me suis débarrassé du redondant chacun et maintenant tout semble bien. c'est bizarre que je ne puisse jamais «courir» pour apparaître dans la console, mais au moins maintenant les problèmes du clic rapide ne se produisent pas. merci beaucoup – rix

+0

Pas un problème, et ne vous inquiétez pas pour le rep ': P' – Bojangles

Répondre

0

vous désactivez "running" juste après l'initialisation de votre animation, pas après avoir terminé votre animation. Par exemple, je le ferais comme ceci:

if (!elem.data('running')) { 
    elem.data('running', true); 
    console.log('started running'); 
    elem.fadeOut('fast',function(){ 
     elem.data('running', false); 
    }); 
} 
Questions connexes