Подтвердить что ты не робот

Почему в Firefox не работает перетаскивание HTML5?

Я связал события с разными элементами, и когда я перетаскиваю их во всех браузерах, кроме Firefox, он работает так, как ожидалось. Однако в firefox это не работает вообще. Единственное событие, которое срабатывает, - dragstart, и ни одно из других событий не срабатывает. Что происходит?

4b9b3361

Ответ 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', '');