小编MMh*_*ter的帖子

拖动启动后可以异步设置event.dataTransfer吗?

目前我正在开发一个场景,我需要在拖动开始后更改附加到拖动元素的数据.基本上,拖放区域是输入字段或textareas,所以我想使用原生,event.dataTransfer.setData因为本机拖放可以使插入符号与鼠标一起移动.

如果我只是setData()dragstart事件的监听器中同步调用,那么一开始就完美无缺.

dragItem.addEventListener("dragstart",function(event){  
     event.dataTransfer.setData("text/plain","data set in dragstart");
}) 
Run Code Online (Sandbox Code Playgroud)

但是,我的方案可能是数据来自异步回调函数,如AJAX请求.然后我试图调用setData()这个回调函数,但似乎没有成功设置.

dragItem.addEventListener("dragstart",function(event){

  event.dataTransfer.setData("text/plain","data set in dragstart");

  //like a callback in Ajax or resolve function of a promise.
  setTimeout(function(){
    console.log("attempt to set data asynchonrously after drag start");
    event.dataTransfer.setData("text/plain","asynchonrously set data");

    //looks like failed, the console output is empty, even not the original set one
    console.log(event.dataTransfer.getData("text/plain"));
  },200)

}) 
Run Code Online (Sandbox Code Playgroud)

我还尝试更改放置区中的数据dragenter甚至是drop事件侦听器.但是仍然没有运气.

这个plunker展示了我的尝试.

然后我参考了MDN API文档来查找dataTransfer对象的官方api描述.但是没有任何关于像setData拖动启动后异步使用的问题.一个非常奇怪的事情是,如果我尝试比较和事件中的两个dataTransfer引用,它们不是同一个对象.现在我不知道实际发生了什么. …

html javascript jquery drag-and-drop dom-events

6
推荐指数
1
解决办法
967
查看次数

标签 统计

dom-events ×1

drag-and-drop ×1

html ×1

javascript ×1

jquery ×1