2009-07-08 5 views
1

Je cours thickbox et jquery ui draggable à la fois sur la même page, et ils sont en conflit.Jquery - Comment exécuter une fonction onclick uniquement si le lien n'est pas déplacé?

Jquery UI Draggable me permet de glisser-déposer les choses d'un endroit à l'autre avec ce code:

$(".droppable").droppable({ 
     drop: function(ev, ui) { 
      do stuff 
} 
}); 

Thickbox commence un événement de clic, avec essentiellement ce code:

$(".thickbox").click(function(){ 
thickbox functions... 
}); 

Mais parce que le lien thickbox est à l'intérieur du div draggable, il ouvre la thickbox quand je fais glisser le lien !! D'où le problème.

Comment puis-je modifier ce code afin que:

  1. Quand je fais glisser le lien, il ne thickbox ouvert.
  2. Lorsque je clique sur le lien (sans le faire glisser), il ouvre thickbox.

Merci!

+0

Il est étrange que l'événement onmouseup ne fonctionne pas. Malheureusement, je n'utilise pas thickbox dans aucun de mes projets pour que je puisse l'essayer. –

Répondre

2

Vérifiez si l'élément est en train d'être déplacé avant d'afficher la zone d'épaisseur. ou désactivez le gestionnaire d'événements thickbox lorsque vous le faites glisser.

par exemple:

$(".thickbox").mouseup(function(){ 
    if (is_being_dragged()) return; 
    // thickbox functions... 
}); 

is_being_dragged() devraient vérifier un drapeau fixé par la fonction glisser. La fonction glisser doit désactiver le drapeau de traînée après qu'il a terminé.

Vous pouvez également résoudre ce problème indépendamment de la fonction de traîne que vous utilisez en faisant de la fonction click un onmousedown, suivie par onmouseup.

$(".thickbox").mousedown(function(){ 
    this.__down = new Date().getTime(); 
}); 

$(".thickbox").mouseup(function(){ 
    var interval = new Date().getTime() - this.__down; 
    // assume dragged if it was pressed 50 millisecs or more ago 
    if (interval > 50) { return } 
}); 

Il est supposé qu'une traînée prend plus de 50 millisecondes et qu'un clic est moindre. Vous pouvez voir ce qui fonctionne le mieux dans votre cas.

Questions connexes