gpt4 book ai didi

jquery - 通过 dataTransfer 传递对象

转载 作者:技术小花猫 更新时间:2023-10-29 11:38:55 26 4
gpt4 key购买 nike

我正在尝试找出一种通过 javascript 的 event.dataTransfer 传递 native 对象以进行拖放的方法。我正在编写 CMS 的前端编辑器部分,并希望用户能够拖放元素(许多不同类型的元素,从文件到图像到 HTML 片段到几乎任何东西)。这就是为什么我想传递一个真实的对象,这样我就可以将数据附加到它以指定了解如何呈现它所必需的东西。

一种解决方法是使用 jQuery 的 .data() 将对象附加到页面上的其他内容,然后简单地在 setData 中传递选择器字符串...但我不是特别喜欢这种 hack。

这也可以通过 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
});

现在,在阅读了规范之后,我完全理解了为什么会失败。我不明白的是,如何最终实现我想要的。

谢谢

最佳答案

在使用 setData 之前,您应该将对象传递给 JSON.stringify,因为您只能存储字符串。

var j = JSON.stringify(foo);
e.originalEvent.dataTransfer.setData("foo", j);

反过来你必须将字符串重新转换为一个对象:

var obj = JSON.parse(e.originalEvent.dataTransfer.getData("foo"));
console.log("foo is:", obj);

参见 this工作 fiddle

关于jquery - 通过 dataTransfer 传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15839649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com