Prévenir un événement de clic JavaScript avec Scriptaculous glisser-déposer

J'ai des éléments sur une page qui peut être déplacée. Ces mêmes éléments ont un événement de clic qui navigue vers une autre page. J'essaie de déterminer la meilleure façon d'éviter que l'événement de clic déclenche si l'utilisateur traîne mais autorise toujours l'événement de clic sinon le glisser. Quelqu'un a-t-il des idées sur la meilleure façon d'accomplir cela?

J'ai résolu cela en utilisant quelque chose comme suit:

new Draggable('id', { onStart: function() { dPhoto = $('id'); Event.stopObserving('id', 'click'); }, onEnd : function() { setTimeout("Event.observe('id', 'click', function() { location.href = 'url'; });", 500); }, revert: true }); 
 var click_func; function onDragStart(drgObj,mouseEvent){ click_func = mouseEvent.target.onclick; mouseEvent.target.onclick = function(e){ mouseEvent.target.onclick = click_func; return false; } } 

Quelque chose comme ce qui suit pourrait faire l'affaire (et éviter que l'événement de clic ne soit déclenché)

 new Draggable('tag', { revert:function() { $('tag').onclick = function(){return false;}; setTimeout('$(\'tag\').onclick = function(){return true;}','500'); return true; } } ); 

Vous pouvez également le faire d'une autre manière. Sur votre startDrag, vous arrêtez d'observer l'objet. Ensuite, vous observez le clic qui conduit à une fonction enddrag qui recrée le premier gestionnaire d'événements.

 function onDragStart() { Event.stopObserving(this.OBJECT,'click'); Event.observe(this.OBJECT,'click',this.onDragEnd.bindAsEventListener(this)); } function onDragEnd() { Event.stopObserving(this.OBJECT,'click'); Event.observe(this.OBJECT,'click',this.PREVIOUSFUNCTION.bindAsEventListener(this)); } 

Cela saisira l'événement de clic restant qui est toujours actif après la fin de la course pour simplement recréer le gestionnaire d'origine. J'espère que ça aide quelqu'un là-bas 🙂