HTML5 DnD dataTransfer setData или getData не работает во всех браузерах, кроме Firefox
Учти это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's not my issue.
dataTransferValue = e.originalEvent.dataTransfer.getData("text/plain");
console.log(dataTransferValue);
};
Насколько я могу судить, это должно работать совершенно нормально, и если вы посмотрите на консоль при перетаскивании элемента, вы увидите записанный идентификатор, что означает, что он просто нашел элемент и захватил его атрибут id. Вопрос в том, просто не устанавливает данные или не получает данные?
Я буду благодарен за предложения, потому что после недели работы над этим с тремя попытками и более чем 200 версиями я начинаю сходить с ума. Все, что я знаю, это то, что он работал в версии 60 или около того, и этот конкретный код не изменился вообще ...
Actually, one of the major differences between 6X and 124 is that I changed the event binding from live()
to on()
. I don't think that's the issue, but I've come to see a couple failures from Chrome when it comes to DnD while working on this. Это было опровергнуто. Метод привязки событий не влияет на проблему.
UPDATE
Я создал новыйJSFiddle это удаляет абсолютно все и оставляет привязки событий и обработчиков. Я проверил это с jQuery 1.7.2 и 1.8 с обоимиon()
а такжеlive()
, Проблема осталась, поэтому я опустил уровень, удалил все фреймворки и использовал чистый JavaScript. Проблемаstill сохранялась, поэтому, основываясь на моем тестировании, это не мой код, который дает сбой. Вместо этого кажется, что Chrome, Safari и Opera все реализуют либоsetData()
или жеgetData()
не в спецификации или просто не работает по той или иной причине. Пожалуйста, исправьте меня, если я ошибаюсь.
В любом случае, если вы посмотрите на новый JSFiddle, вы сможете повторить проблему, просто посмотрите на консоль, когда перетаскиваете элемент, предназначенный для принятия отбрасывания. Я пошел вперед и открыл билет схром, В конце концов, я все еще могу делать что-то не так, но я просто не знаю, как еще сделать DnD на этом этапе. Новый JSFiddle настолько урезан, насколько это возможно ...