ドラッグ アンド ドロップのために JavaScript の event.dataTransfer を介してネイティブ オブジェクトを渡す方法を見つけようとしています。私は CMS のフロント エンド エディター部分を作成しており、ユーザーが要素をドラッグ アンド ドロップできるようにしたいと考えています (ファイルから画像、HTML のスニペット、ほぼすべての要素に至るまで、さまざまな種類の)。そのため、実際のオブジェクトを渡したいので、データをアタッチして、レンダリング方法を知るために必要なものを指定できます。
回避策の 1 つは、jQuery の .data() を使用してオブジェクトをページ上の別の場所にアタッチし、セレクター文字列を setData に渡すことですが、私はそのハックを特に楽しんでいません。
これは、jQuery UI のドラッグ可能/ドロップ可能 (ライブラリを使用することに完全に反対しているわけではありません) でも解決できますが、ドロップゾーンは iframe 内にあるため、これは実際には最新の jQuery UI (1.10.2) で文書化されたバグです。 )。また、可能であればネイティブで行うことを強く希望します。このアプリにはすでに十分なライブラリがあります。
ここに問題があります: http://jsfiddle.net/AHnh8/
var foo = {foo: "foo", bar: "bar"};
$dragme.on("dragstart", function(e) {
e.originalEvent.dataTransfer.setData("foo", foo);
});
$dropzone.on("dragenter", function(e) { e.preventDefault(); });
$dropzone.on("dragover", function(e) { e.preventDefault(); });
$dropzone.on("drop", function(e) {
console.log(e.originalEvent.dataTransfer.getData("foo")); // [Object object]
console.log(typeof e.originalEvent.dataTransfer.getData("foo")); // string
});
さて、仕様を読んだ後、これが失敗する理由を完全に理解しました。私が理解していないのは、最終的に私が望むものを達成する方法です。
ありがとう