【发布时间】:2026-01-25 10:15:01
【问题描述】:
我正在尝试找出一种通过 javascript 的 event.dataTransfer 传递原生对象以进行拖放的方法。我正在编写 CMS 的前端编辑器部分,并希望用户能够拖放元素(许多不同类型的元素,从文件到图像到 HTML 的 sn-ps 到几乎任何东西)。这就是为什么我想传递一个真实的对象,所以我可以将数据附加到它以指定为了知道如何呈现它而需要的东西。
一种解决方法是使用 jQuery 的 .data() 将对象附加到页面上的其他内容,然后只需在 setData 中传递选择器字符串...但我并不特别喜欢这种 hack。
这也可以通过 jQuery UI 的可拖放/可拖放来解决(我并不完全反对使用任何库),但由于 dropzone 位于 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
});
现在,在阅读了规范之后,我完全明白为什么会失败。我不明白的是,如何最终实现我想要的。
谢谢
【问题讨论】:
-
我认为您只需要在发送数据之前对数据进行字符串化,并在接收时解析数据。
标签: jquery html drag-and-drop