2010-08-15 135 views
17

有一個可通過jQuery UI拖動拖動的大div(地圖)。該div有可點擊的子div。如何避免jQuery UI可拖動也觸發點擊事件

我的問題是,如果你拖動地圖,在鼠標上,點擊事件會觸發你開始拖動的任何子div。

如果拖動它的一部分拖動(相對於某人只需單擊而沒有拖動,在這種情況下需要單擊事件),如何停止觸發單擊事件的鼠標。

+0

我有同樣的問題,並找到了一個簡單的解決方案。在子元素上,在'click'之前定義'draggable',像這樣:'$('element')。draggable({disabled:true});' – cakan 2015-11-20 08:48:03

回答

3

你可能在開始拖動時設置一個變量,例如「justDragged = true」,然後在mouseUp事件中檢查這個變量,如果是true,將其設置爲false,然後執行event.preventDefault + return w/o做任何事情。這樣它就會在拖動之後跳過第一次點擊。似乎有點駭人聽聞,也許其他人會有一個更優雅的解決方案。

8

我有這個問題,解決的辦法是應用可點擊事件處理程序之前的可拖動事件處理程序。我正在移動一些代碼,並突然出現這個問題。我終於意識到我已經改變了我申請處理程序的順序。當我切換回來時,事情又開始正常工作 - 拖動不會導致點擊。

+0

Arghh,我一直試圖解決這個問題,解決方案爲我工作。但事實並非如此。我在jQuery 1.6.1 – brainjam 2011-06-14 17:57:37

+0

爲我工作!比其他所有的回答都好得多。 – 2013-07-27 23:00:48

+1

其中沒有一個適合我的工作:-( – ProblemsOfSumit 2014-03-19 12:30:33

0

另一種方法是根本不允許內可拖動的可點擊區域拖動:

jQuery UI Draggable API

+0

謹慎解釋downvotes? – Ryan 2015-06-04 18:46:44

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

這工作,因爲「一聽衆」被解僱以前「正常」聽衆。因此,如果一個聽衆停止傳播,它將永遠不會到達您之前設置的聽衆。

+0

http ://jsfiddle.net/qYz9V/2/這裏是這個答案的小提琴:)謝謝。 – 2013-10-12 22:54:50

+3

小提琴顯示它的工作,但由於某種原因,它不適合我... – WtFudgE 2014-04-30 08:06:24

+7

此解決方案不工作在FF 31,event.toElement未定義。然而,而不是event.toElement使用event.originalEvent.target將在所有瀏覽器中工作 – Attenzione 2015-01-21 14:07:52