Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   DragAndDrop и Mouseleave (https://javascript.ru/forum/events/50241-draganddrop-i-mouseleave.html)

FactoREAL 18.09.2014 10:49

DragAndDrop и Mouseleave
 
Ребята, помогите найти ошибку. Ситуация такая: у меня есть некий список, элементы которого я хочу сделать перетаскиваемыми.

на данной картинке светло серые строки с кабинетами я хочу перетаскивать, но делать я это хочу только "за точки", расположенные слева в каждой строке. Изначально строки имеют атрибут draggable=false. У меня есть такой код, который при нажатии на "точки" делает у строк draggable=true.
dots[0].addEventListener("mousedown", function(e){
	e.target.parentNode.draggable = true;
}, false);
dots[0].addEventListener("mouseleave", function(e){
	e.target.parentNode.draggable = false;
}, false);

затем уже срабатывают события перетаскивания, но это не суть. Проблема в том, что когда я начинаю "тащить" за точки, строка становится draggable, но как только курсор выходит за точки, срабатывает mouseleave, и draggable становится равный false (т.е. я начинаю тащить строку, и она сразу же становится не перетаскиваемой)... Такая ситуация происходит только в Firefox, в хроме все это работает как нужно, тоесть mouseleave срабатывает только тогда, когда я отжимаю левую кнопку мышки, и не важно как далеко она находится от объекта с точками. Скажу даже больше, когда я тестировал DragAndDrop в отдельном проекте у меня всё это работало во всех браузерах, а когда я прикручиваю его к рабочему проекту возникает такая ситуация. В рабочем проекте перетаскиваемые строки создаются динамически, на них навешаны другие события (например mouseclick) и т.д. вообщем просто что-то конфликтует с моим DragAndDrop. Поэтому прошу подсказать, где я мог ошибиться.

FactoREAL 18.09.2014 12:22

ну как всегда - 2 дня мучался, ломал мозг, ничего не мог сделать. Стоило написать на форум - разобрался сам. В общем, если кому-то пригодится, то проблема была в отсутствии
e.dataTransfer.setData(...)

в обработчике события "dragstart"... понятия не имею почему, но если не присвоить какие-то данные, то в firefox Drag and Drop нихрена не работает как надо. В тоже время в других браузерах все работает корректно и без этой строки.

P.S. С каждым днем firefox разочаровывает меня всё больше и больше, сижу на нем наверное только из за привычки к firebug... браузер стал абсолютно не пригоден для разработки. Да и для повседневного пользования тоже, после 30 версии даже IE кажется менее глючным и тормозным... :(

kostyanet 18.09.2014 22:34

Я даже не знаю что такое firebug, а ФФ меня тоже разочаровывает все больше, даже больше чем Хром, не говоря про Ие-ие. :)

У FF отродясь была высокая толерастия к косякам в скриптах. Пока у меня Ишака еще фурычил я в нем все проверял. Теперь проверяю в Хроме. Потому что ФФ кладет на многое.

Вспомнил. Как-то нарисовал обхект на пару тыщ строк и внезапно полез проверять в Хроме. И там мне сказали что вот так (как в php например)

my_func:function(param=null) {

делать нельзя. А в ФФ все прекрасно инициализировалось как изображено. Пришлось все эти фичи искать и переписывать на кошерный лад.


Часовой пояс GMT +3, время: 06:14.