Рассмотрим этот JSFiddle. Он отлично работает в Firefox (14.0.1), но не работает в Chrome (21.0.1180.75), Safari (?) И Opera (12.01?) Как на Windows (7), так и на OS X (10.8). Насколько я могу судить, проблема связана с методами setData()
или getData()
объекта dataTransfer
. Вот соответствующий код из JSFiddle.
var dragStartHandler = function (e) {
e.originalEvent.dataTransfer.effectAllowed = "move";
e.originalEvent.dataTransfer.setData("text/plain", this.id);
};
var dragEnterHandler = function (e) {
// dataTransferValue is a global variable declared higher up.
// No, I don't want to hear about why global variables are evil,
// that not my issue.
dataTransferValue = e.originalEvent.dataTransfer.getData("text/plain");
console.log(dataTransferValue);
};
Насколько я могу судить, это должно работать отлично, и если вы посмотрите на консоль, перетаскивая элемент, вы увидите выписанный идентификатор, а это значит, что он очень хорошо находит элемент и захватывает его атрибут id. Вопрос в том, что он просто не устанавливает данные или не получает данные?
Я был бы признателен за предложения, потому что после недели работы над этим с тремя попытками и более чем 200 + версиями, я начинаю терять сознание. Все, что я знаю, оно используется для работы в версии 60 или около того, и что конкретный код не изменился вообще...
На самом деле, одно из основных различий между 6X и 124 заключается в том, что я изменил привязку события от Это было развенчано. Метод привязки событий не влияет на проблему.live()
до on()
. Я не думаю, что проблема, но я пришел, чтобы увидеть пару неудач из Chrome, когда речь заходит о DnD, работая над этим.
UPDATE
Я создал новый JSFiddle, который полностью удаляет все и просто оставляет привязку события и обработчики. Я тестировал его с помощью jQuery 1.7.2 и 1.8 с on()
и live()
. Проблема продолжалась, поэтому я сбросил уровень и удалил все фреймворки и использовал чистый JavaScript. Проблема все еще сохранялась, поэтому на основании моего тестирования это не мой код, который не работает. Вместо этого выясняется, что Chrome, Safari и Opera реализуют либо setData()
, либо getData()
off spec, либо просто по какой-то причине не работают. Пожалуйста, поправьте меня, если я ошибаюсь.
В любом случае, если вы посмотрите на новый JSFiddle, вы сможете реплицировать проблему, просто посмотрите на консоль, когда перетаскиваете элемент, назначенный для принятия капли. Я пошел вперед и открыл билет Chromium. В конце концов, я все еще могу делать что-то неправильно, но я просто не знаю, как еще сделать DnD на данный момент. Новый JSFiddle настолько урезан, насколько это возможно...