Как избежать jQuery UI, который можно перетащить из также запуская событие click

A имеют большой div (карту), который можно перетаскивать через jQuery UI draggable. У div есть дочерние div, которые можно кликать.

Моя проблема в том, что если вы перетаскиваете карту, при нажатии мыши событие click запускается на любом дочернем div, с которого вы начали перетаскивать.

Как отключить мышь от запуска события клика, если его часть перетаскивания (в отличие от того, кто просто щелкает без перетаскивания, в этом случае требуется событие щелчка).

Ответ 1

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

Это работает, потому что "однослушатели" увольняются перед "нормальными" слушателями. Поэтому, если один слушатель прекращает распространение, он никогда не достигнет ваших ранее установленных слушателей.

Ответ 2

У меня возникла эта проблема, и решение заключается в применении перетаскиваемого обработчика событий перед обработчиком событий кликов. Я перемещал какой-то код и внезапно столкнулся с этой проблемой. Наконец я понял, что переключил порядок, в который я применил обработчики. Когда я переключил его обратно, все снова начало работать правильно - перетаскивание не вызывало щелчка.

Ответ 3

Возможно, вы установили переменную типа justDragged = true при запуске перетаскивания, а затем на событие mouseUp проверите эту переменную, и если true, установите значение false и затем выполните событие event.preventDefault + return wo o do что-нибудь. Таким образом, он пропускает первый щелчок после перетаскивания. Кажется, это хаки, возможно, у других будет более элегантное решение.