Нужно ли мне писать плагин jQuery для получения события наведения при использовании перетаскиваемого объекта? - PullRequest
0 голосов
/ 16 января 2012

Я работаю над набором связанных вкладок со списками на каждой вкладке.Желаемая функциональность заключается в возможности перетаскивания элемента списка из списка на вкладке A в список на вкладке B. Пользователь выбирает li из ul на вкладке A, в течение примерно 1 секунды на вкладке B вкладкапереключается автоматически, и затем пользователь может перетащить вниз к ul на вкладке B и вставить li в этот список.

Похоже, что jQuery ui теперь перехватывает все события мыши, как только начинается перетаскивание, и не пропускает их.Я вижу еще один пост здесь jQuery - остановка события наведения при перетаскивании , который описывает противоположную проблему, но это было сделано в 2010 году, и теперь hover не будет работать при перетаскивании перетаскиваемого объекта.

Я покопался в jQuery ui V. 1.8.17 и обнаружил, что пользовательский интерфейс jQuery перехватывает все действия мыши, проверяет, хотят ли какие-либо плагины взаимодействовать с ними, и не передает их браузеру.В случае с draggable кажется, что он там перехватывает и просто выполняет свои собственные действия, что имеет смысл.Что касается перетаскивания, когда что-то поднято, все ввод мыши для него .Но в моем случае, draggable ничего не делает с вводом при наведении курсора.

Я знаю, что мое событие срабатывает, пока А) Не несет перетаскиваемого предмета, просто зависает над вкладкой.Б) Удерживая кнопку мыши нажатой, до, во время и после зависания, без переноса перетаскиваемого предмета, но НЕ при переносе перетаскиваемого вдоль.

Я безуспешно пытался связать события hover, mouseenter, mouseover, sort, sortover,

Итак, какие у меня варианты?Нужно ли мне исправлять jQueryUI или писать нестандартный перетаскиваемый плагин (в значительной степени заимствуя из текущего), или я упускаю более простой способ?

Я могу предоставить код, если это необходимо, но это довольно просто.Дайте мне знать, если вам нужны дополнительные детали и спасибо заранее.

1 Ответ

1 голос
/ 16 января 2012

Хорошо, так что я решил это с помощью 2-х строчного патча для droppable. Добавьте свойство в код сбрасывания:

hoverable: false,

Я сделал это в строке 26.

Затем в строке 91 (версия, указанная выше) добавьте проверку этого свойства к условию, которое проверяет принятие:

if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element)) || this.hoverable == true) {

Затем я сделал то, что хотел, чтобы событие hover было сброшено без принятия, что несущественно, но установило hoverable: true. Это позволяет вам заставить другие элементы DOM взаимодействовать с Draggables, но не принимать Droppables.

Не уверен, что кому-то еще нужно решить эту проблему, но надеюсь, что это поможет.

...