获取丢弃的元素ID而不是放弃目标ID

获取丢弃的元素ID而不是放弃目标ID

问题描述:

我对jQuery相当陌生,并且试图获取拖动的图像元素ID以追加到放置目标而不是图像元素本身或放置目标ID。我正在使用html5原生DnD。到目前为止,我可以通过使用drag函数中的datatransfer方法和drop中的getdata函数通过id发送元素来追加元素。每当我尝试从下拉列表中调用该标识时,它将获取放置目标标识而不是拖动的元素。获取丢弃的元素ID而不是放弃目标ID

任何帮助将不胜感激,因为我已经在网上彻底搜索,只有更多的方法来获得放置区域的目标ID。这里是我当前的代码捣鼓的一个片段:

function allowDrop(ev) { 
ev.preventDefault(); 
} 

function dragStart(ev) { 

ev.dataTransfer.setData('Text/html', ev.target.id); // sends the dragged images data. 

//alert(ev.target.id); // alerts the correct id of the dragged image. 

} 


function drop(ev) { 

ev.preventDefault(); 
var data = ev.dataTransfer.getData("text/html");//retrieves dropped images data. 
ev.target.appendChild(document.getElementById(data));//this displays the dropped image. 

//alert(ev.target.id); // alerts the id of the drop target(Want to get the dropped images id.) 

//$("#mybillets").append("<span>"+ev.target.id+" </span>"); //appends the drop targets id(Want to append the dropped images id.) 
} 
+1

如果你的DOM元素在一个名为变量'elem',那么ID只是'elem.id'。 – jfriend00 2014-10-22 02:47:00

+0

在这种情况下'数据'应该给你 – 2014-10-22 03:59:22

+0

关于如何实现这一点的任何建议?尝试了很多不同的东西,我的头炸了。 – Jason 2014-10-22 04:08:39

drop方法看起来像ev的事件对象,所以ev.target将指在其项目被丢弃的元素。因此使用ev.target.id来引用放置目标ID。

function allowDrop(ev) { 
 
    ev.preventDefault(); 
 
} 
 

 
function drag(ev) { 
 
    ev.dataTransfer.setData('Text/html', ev.target.id); 
 
} 
 

 
function drop(ev, target) { 
 
    ev.preventDefault(); 
 
    console.log(target.id, ev.target.id) 
 

 
    var data = ev.dataTransfer.getData("text/html"); 
 
    alert(data) 
 
}
#div1 { 
 
    width: 350px; 
 
    height: 70px; 
 
    padding: 10px; 
 
    border: 1px solid #aaaaaa; 
 
}
<div id="div1" ondrop="drop(event, this)" ondragover="allowDrop(event)"></div> 
 
<br/> 
 
<img id="drag1" src="//placehold.it/336X69/ff0000" draggable="true" ondragstart="drag(event)" width="336" height="69" />

+1

我实际上试图显示被拖动的图像的id而不是放置目标,为了更好地说明我正在尝试做什么,我编辑了一些代码。 ev.target.id引用触发该事件的元素,在放置事件的情况下,该元素引用图像被放入的区域。我想获取正在丢弃的图像的ID。 – Jason 2014-10-22 03:57:56

+0

@Jason尝试更新...它应该提醒'drag1' – 2014-10-22 04:09:37

+0

我做了,现在正在工作..谢谢!它现在附加正确的ID。 – Jason 2014-10-22 04:20:05

由于@Arun P佐尼。在这个简单的例子上做得很好。

不过,我只是想补充一点,如果你尝试从“A”标签拖动,你就不会有太多的运气。

这将工作(在所有浏览器):

<a draggable="true" ondragstart="drag(event)" id="drag1" href="#"> 
<img src="//placehold.it/336X69/ff0000" width="336" height="69" /> 
</a> 

但是这会工作(更多的浏览器):

<img draggable="true" ondragstart="drag(event)" id="drag1" src="//placehold.it/336X69/ff0000" width="336" height="69" /> 

这花了我很长的时间去发现了这一点,因为许多浏览器不会返回或让您获得拖动的源代码。 这个例子应该透露给你的源ID中的警报,并且控制台:

<script> 
    function allowDrop(ev) { 
     ev.preventDefault(); 
    } 

    function drag(ev) { 
     ev.dataTransfer.setData('text', ev.target.id); 
    } 

    function drop(ev, target) { 
     ev.preventDefault(); 
     console.log(target.id + " : " + ev.target.id) 
     console.log(ev.dataTransfer.getData("text/html")); 
     console.log(ev.dataTransfer.getData("text")); 
     var data = ev.dataTransfer.getData("text"); 
     alert(data) 
    } 
</script> 
<style "type="text/css"> 
     #div1 
     { 
      width: 350px; 
      height: 70px; 
      padding: 10px; 
      border: 1px solid #aaaaaa; 
     } 
</style> 

<div id="div1" ondrop="drop(event, this)" ondragover="allowDrop(event)"></div> 
<br/> 
<img id="drag1" src="http://placehold.it/336X69/ff0000" draggable="true" ondragstart="drag(event)" width="336" height="69" /> 
+0

现在它设置在这个jsfiddle中:https://jsfiddle.net/tqk3b745/ – 2016-12-24 01:36:26