使用JSON拖放HTML 5 jQuery:e.dataTransfer.setData()

Syl*_*Syl 8 html5 drag-and-drop

这是我的举动:

dragstart: function(e) {
    $(this).css('opacity', '0.5');
    e.dataTransfer.effectAllowed = 'move';
    e.dataTransfer.setData('application/json', {
        id: $(this).attr('id'),
        header: $('header', this).text()
    });
},
Run Code Online (Sandbox Code Playgroud)

我想传递一些信息,如id和文本.我的下落是:

drop: function(e) {
    var data = e.dataTransfer.getData('application/json');
    alert(data);
    $(this).attr('id', data.id);
    $('header', this).text(data.header);
},
Run Code Online (Sandbox Code Playgroud)

但数据未定义,我无法访问我的数据.这是正确的方法吗?

谢谢!

Stu*_*rog 9

在拖动开始

var testjson = {name:"asd",tall:123};
e.dataTransfer.setData("text/plain",JSON.stringify(testjson));
e.dataTransfer.effectAllowed = "copy";
Run Code Online (Sandbox Code Playgroud)

在下降

var data = e.dataTransfer.getData("text/plain");
console.log(JSON.parse(data));
Run Code Online (Sandbox Code Playgroud)

你会得到的

Object {name: "asd", tall: 123} 
Run Code Online (Sandbox Code Playgroud)

在console.log中

  • 如果有办法传递实际的json对象那就更方便了。遗憾的是您必须将其字符串化。 (2认同)

luk*_*onn -1

如果您的dragstart函数中包含effectAllowed,例如:

e.dataTransfer.effectAllowed = 'move';
Run Code Online (Sandbox Code Playgroud)

那么我的理解是你需要在 drop 函数中定义一个等效的 dropEffect :

e.dataTransfer.dropEffect = 'move';
Run Code Online (Sandbox Code Playgroud)