Я связал события с разными элементами, и когда я перетаскиваю их во всех браузерах, кроме Firefox, он работает так, как ожидалось. Однако в firefox это не работает вообще. Единственное событие, которое срабатывает, - dragstart
, и ни одно из других событий не срабатывает. Что происходит?
Почему в Firefox не работает перетаскивание HTML5?
Ответ 1
Я не использую jQuery, поэтому удалил часть originalEvent и изменил формат на текстовый (или в IE возникла проблема), и это работает:
event.dataTransfer.setData('text', 'anything');
В событии drop обязательно позвоните:
event.preventDefault();
Или он перейдет на что-нибудь .com.
Ответ 2
Firefox требует, чтобы пользователь выполнял функцию dataTransfer.setData
в событии.
Для пользователей jQuery
это означает, что следующий код должен решить вашу проблему:
function dragstartHandler(event){
event.originalEvent.dataTransfer.setData('text/plain', 'anything');
}
Будущие события с тем же сопротивлением теперь будут правильно срабатывать, как вы ожидали. Очевидно, вы можете заменить аргументы setData
более полезными данными.
Ответ 3
FF имеет давние проблемы с приемом определенных событий мыши, которые происходят из элементов, для которых переполнение установлено в автоматический режим или прокрутку.
В моем случае у меня была хорошо используемая библиотека для перетаскивания, которая отлично работала в примерах и в моем приложении на любом браузере, кроме Firefox. После поиска билетов, связанных с этим, я нашел решение, которое я полностью зачисляю на вкладчика этого билета https://bugzilla.mozilla.org/show_bug.cgi?id=339293
который должен установить -moz-user-select: нет
на прокручиваемом элементе, перетаскиваемом из. Это решило мою конкретную проблему.
Ответ 4
Вы можете использовать это как ссылку для решения этого вопроса относительно переадресаций, которые происходят в Firefox.
Чтобы устранить эту проблему, вам необходимо предотвратить действие по умолчанию в методе drop.
function drop(e) {
if(e.preventDefault) { e.preventDefault(); }
if(e.stopPropagation) { e.stopPropagation(); }
//your code here
return false;
}
Я получил это решение от этой ссылки.
Ответ 5
используйте это
IE:
event.dataTransfer.setData('text', '');
Firefox:
event.dataTransfer.setData('text/plain', '');