このJSFiddleを検討してください。Firefox(14.0.1)では正常に動作しますが、Windows(7)とOS X(10.8)の両方のChrome(21.0.1180.75)、Safari(?)、Opera(12.01?)では失敗します。私が知る限り、問題はオブジェクトの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が書き出されていることがわかります。つまり、要素が正常に検出され、そのid属性が取得されていることを意味します。問題は、それは単にデータを設定していないのか、それともデータを取得していないのかということです。
3回の試行と約200以上のバージョンでこれに取り組んだ後、私は頭がおかしくなり始めているので、提案をいただければ幸いです。私が知っているのは、バージョン60かそこらで動作していたことと、特定のコードがまったく変更されていないことだけです...
実際、6Xと124の主な違いの1つは、イベントバインディングをからに変更したこれは暴かれた。イベントバインディングメソッドは問題に影響を与えません。live()
ことon()
です。それが問題だとは思いませんが、これに取り組んでいる間、DnDに関してChromeからいくつかの失敗が見られるようになりました。
アップデート
私は新しいJSFiddleを作成しました。これは、すべてを完全に取り除き、イベントバインディングとハンドラーだけを残します。on()
との両方を使用してjQuery1.7.2と1.8でテストしましたlive()
。問題が解決しないので、レベルを下げてすべてのフレームワークを削除し、純粋なJavaScriptを使用しました。問題はまだ続いていたので、私のテストに基づいて、失敗したのは私のコードではありません。代わりに、Chrome、Safari、Operaはすべて、仕様外または仕様外のいずれsetData()
かを実装しているかgetData()
、何らかの理由で失敗しているようです。私が間違っている場合は訂正してください。
とにかく、新しいJSFiddleを見ると、問題を再現できるはずです。ドロップを受け入れるように指定された要素をドラッグしているときに、コンソールを見てください。私は先に進んで、Chromiumでチケットを開きました。結局、私はまだ何か間違ったことをしているかもしれませんが、この時点で他にDnDを行う方法がわかりません。新しいJSFiddleは、可能な限り削除されています...