HTML5 DnD dataTransfer setData lub getData nie działa w każdej przeglądarce oprócz Firefoksa
Rozważ toJSFiddle. Działa dobrze w Firefoksie (14.0.1), ale nie działa w Chrome (21.0.1180.75), Safari (?) I Opera (12.01?) Zarówno w Windows (7), jak i OS X (10.8). O ile mogę powiedzieć, problem dotyczy albosetData()
lubgetData()
metody nadataTransfer
obiekt. Oto odpowiedni kod z 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);
};
O ile mogę powiedzieć, to powinno działać idealnie i jeśli spojrzysz na konsolę podczas przeciągania elementu, zobaczysz wypisany identyfikator, co oznacza, że znajduje element w porządku i pobiera jego atrybut id. Pytanie brzmi: czy po prostu nie ustawia się danych lub nie uzyskuje danych?
Byłbym wdzięczny za sugestie, ponieważ po tygodniu pracy nad trzema próbami i około 200 wersjami zaczynam tracić rozum. Wiem tylko, że w przeszłości działało w wersji 60 i ten konkretny kod w ogóle się nie zmienił ...
Właściwie jedną z głównych różnic między 6X a 124 jest to, że zmieniłem powiązanie zdarzenia zlive()
doon()
. Nie sądzę, żeby to było problemem, ale zobaczyłem kilka błędów z Chrome, jeśli chodzi o DnD podczas pracy nad tym. Zostało to obalone. Metoda wiązania zdarzeń nie ma wpływu na problem.
AKTUALIZACJA
Stworzyłem nowyJSFiddle to usuwa absolutnie wszystko i po prostu pozostawia powiązanie zdarzeń i programy obsługi. Przetestowałem go z jQuery 1.7.2 i 1.8 z obydwomaon()
ilive()
. Problem nadal występował, więc obniżyłem poziom i usunąłem wszystkie struktury i użyłem czystego JavaScript. Problemnadal przetrwał, więc w oparciu o moje testy to nie mój kod zawodzi. Zamiast tego wygląda na to, że Chrome, Safari i Opera również się implementująsetData()
lubgetData()
poza specyfikacją lub po prostu nie działa z jakiegoś powodu. Proszę popraw mnie jeżeli się mylę.
W każdym razie, jeśli spojrzysz na nowy JSFiddle, powinieneś być w stanie replikować problem, po prostu spójrz na konsolę, gdy przeciągasz element wyznaczony do zaakceptowania upuszczenia. Poszedłem i otworzyłem bilet zChrom. W końcu mogę nadal robić coś złego, ale po prostu nie wiem, jak inaczej zrobić DnD w tym momencie. Nowy JSFiddle jest tak samo pozbawiony możliwości, jak tylko może ...