2010-08-15 2 views
17

A avoir un grand div (une carte) qui peut être déplacé via l'interface utilisateur de jQuery. Le div a des divs enfants qui sont cliquables.comment éviter que l'interface utilisateur de l'interface utilisateur jQuery ne déclenche également l'événement de clic

Mon problème est que si vous faites glisser la carte, à la souris, l'événement click est déclenché sur n'importe quel enfant div que vous avez commencé à faire glisser. Comment empêcher la souris de déclencher l'événement click si elle fait partie d'un glisser (par opposition à quelqu'un qui clique sans glisser, auquel cas l'événement click est souhaité).

+0

J'ai eu le même problème et j'ai trouvé une solution simple. Sur l'élément enfant, définissez 'draggable' avant' click', comme suit: '$ ('element'). Draggable ({disabled: true});' – cakan

Répondre

3

Pourriez-vous définir une variable telle que "justDragged = true" lors du démarrage du glisser puis sur l'événement mouseUp vérifier cette variable et si vrai, définissez-la sur false, puis faites un event.preventDefault + return w/o faire quelque chose. De cette façon, il saute le premier clic après le glisser. Semble un peu hackish, peut-être que d'autres auront une solution plus élégante.

8

J'ai rencontré ce problème et la solution consiste à appliquer le gestionnaire d'événements draggable AVANT le gestionnaire d'événements click. Je déplaçais du code autour et soudainement eu ce problème. J'ai finalement réalisé que j'avais changé l'ordre dans lequel j'ai appliqué les gestionnaires. Quand je l'ai rétabli, les choses ont recommencé à fonctionner correctement - le glisser n'a pas causé de clic.

+0

Arghh, j'ai essayé de résoudre ce problème, et je souhaite que solution a fonctionné pour moi. Mais ce n'est pas le cas. Je suis sur jQuery 1.6.1 – brainjam

+0

A travaillé pour moi! Beaucoup mieux que tous les autres shnanigans-ey réponses. –

+1

aucun de qui fonctionne pour moi :-( – ProblemsOfSumit

0

Une autre solution consiste à tout simplement pas permettre à glisser des zones cliquables dans le draggable:

jQuery UI Draggable API

+0

Souciez-vous d'expliquer les downvotes? – Ryan

47
$('.selector').draggable({ 
    stop: function(event, ui) { 
     // event.toElement is the element that was responsible 
     // for triggering this event. The handle, in case of a draggable. 
     $(event.originalEvent.target).one('click', function(e){ e.stopImmediatePropagation(); }); 
    } 
}); 

Cela fonctionne parce que "one-auditeurs" sont mis le feu avant"normal" auditeurs. Donc, si un one-listener arrête la propagation, il n'atteindra jamais vos écouteurs précédemment définis.

+0

http : //jsfiddle.net/qYz9V/2/ voici le violon de cette réponse :) merci. –

+3

le violon montre que ça marche, mais pour une raison quelconque ce n'est pas pour moi ... – WtFudgE

+7

Cette solution ne fonctionne pas dans FF 31, event.toElement n'est pas défini. Cependant, au lieu de event.toElement, utilisez event.originalEvent.target fonctionnera dans tous les navigateurs – Attenzione

Questions connexes