2010-01-29 6 views
5

Chaque fois qu'un gestionnaire mousedown ou mouseup est attaché à un élément, le dblclick ne peut pas être attaché (ne fonctionnera pas s'il est joint), bien que cela semble assez juste pour rétablir un dblclick fonctionnalité sans la réécrire de zéro (soupir ...) Ou est-ce qu'il me manque quelque chose à propos de la propagation d'événements?Avoir à la fois mousedown/mouseup et dblclick dans jQuery

+0

Impossible de reproduire cela dans un navigateur. Suspecter quelque chose d'autre est faux. – bobince

Répondre

4

Il fonctionne - placer ce code dans Firebug sur cette même page et vous verrez fonctionner (essayer en double-cliquant sur le texte de votre question):

($('.post-text') 
    .mousedown(function() { console.log('down'); }) 
    .mouseup(function() { console.log('up'); }) 
    .dblclick(function() { console.log('dbclick'); })); 

Ne pas avoir Firebug? Va le chercher, je vais attendre!

+0

Merci Emil, j'étais dans Opera 10.10, un code fonctionne de débogage similaires (maison) mais hapazardly: \t scrollframe \t .mousedown (function (EVT) {eventlog (EVT, '', false);}) \t. mouseup (fonction (evt) {eventlog (evt, '', false);}) \t .dblclick (unscroll); Il semble qu'il y ait des problèmes doubleclick avec Opera, plus le contexte est un peu plus compliqué que la zone div non responsive est scrollable et contient également des objets draggables. Quoi qu'il en soit, c'était une question stupide, puisque j'ai besoin de différer l'action sur le mousedown, je vais tester pour un timeout encore en cours d'exécution sur le deuxième mousedown. (limite de commentaire suce) – Favonius

1

Votre mousedown et mouseup ne peut pas:

  1. faire e.stopPropagate etc.
  2. return false

et il devrait fonctionner si votre code ne dispose pas d'un conflit entre les méthodes

1

Bien que cette question soit vraiment ancienne, je veux montrer comment j'ai réussi avec cela.

Ce bloc ne sera pas travail:

 $(element).on('mousedown', function(event) { 
      ... 
     }); 

     $(element).on('dblclick', function(event) { 
      ... 
     }); 

Mais vous pouvez utiliser cet extrait pour créer le même gestionnaire de comportement:

 var clicks = 0, delay = 400; 
     $(element).on('mousedown', function(event) { 
      event.preventDefault(); 
      clicks++; 

      setTimeout(function() { 
       clicks = 0; 
      }, delay); 

      if (clicks === 2) { 
       // double click event handler should be here 
       clicks = 0; 
       return; 
      } else { 
       // mousedown event handler should be here 
      } 
     }); 
Questions connexes