4

我在頁面上有一些可拖動的元素。這些相同的元素有一個導航到另一個頁面的點擊事件。我試圖確定阻止點擊事件發起的最好方法,如果用戶正在拖動,但仍然允許點擊事件(如果不拖動)。任何人有任何想法來完成這個最好的方法?使用Scriptaculous拖放防止JavaScript單擊事件

回答

1

我解決了這個使用類似以下內容:

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 
}); 
0

類似下面可能做的伎倆(防止click事件被解僱了)

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

謝謝,但這並沒有很好的工作。它可以防止即使在超時之後發生點擊事件。似乎應該有一個更清潔的解決方案。 – digitalsanctum 2008-11-08 17:38:05

+0

我同意。我值得一試。 – VonC 2008-11-08 17:57:54

1
var click_func; 
function onDragStart(drgObj,mouseEvent){ 
    click_func = mouseEvent.target.onclick; 

    mouseEvent.target.onclick = function(e){ 
     mouseEvent.target.onclick = click_func; 
     return false; 
    } 
} 
0

你也可以用另一種方式做到這一點。在你的startDrag你停止觀察對象。然後你再次觀察點擊會導致重新創建第一個事件處理程序的enddrag函數。

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)); 
} 

這將趕上吃剩的點擊事件,仍然是活動後enddrag只是重建原始的處理程序。我希望這可以幫助那裏的人:)