UPDATED
You can find working exmaple HERE.
Add an id
to the both elements (dragged and dropped), after that add attribute draggable = "true"
to the element you want to drag.
Now use ondragstart / ondrop
to add the instructions your want to do on start of dragging and on dropping the label, and prevent the default action of functions ondragend & ondragover
.
Using event.dataTransfer.setData
to store the text we want to copy and event.dataTransfer.getData
to get the text and past it in the position we want on dropping.
HTML :
<label id="dragSource" draggable = "true">i am new to JavaScript</label>
<p type="text" id="dropTarget">Drop label here</p>
JS :
var dragSource = document.getElementById("dragSource");
dragSource.ondragstart = function(event) {
var dataToCopy = event.target.innerText;
event.dataTransfer.setData("Text", dataToCopy);
return true;
};
var dropTarget = document.getElementById("dropTarget");
dropTarget.ondrop = function(event) {
this.innerText = this.innerText +" "+ event.dataTransfer.getData("Text");
event.preventDefault();
return false;
};
dropTarget.ondragover = function(event) {
event.preventDefault();
return false;
};
dropTarget.ondragend = function(event) {
event.preventDefault();
return false;
};
OR
You can use javascript inline event handlers (knowing that some developers see that it is a bad practice).
HTML :
<label draggable="true" ondragstart="drag(event)">i am new to JavaScript</label>
<p type="text" ondragover="allowDrop(event)" ondrop="drop(event)">i am a student and</p>
JS :
drag = function(ev) {
event.dataTransfer.setData("text", ev.target.innerText);
}
drop = function(ev) {
ev.target.innerText = ev.target.innerText +" "+ event.dataTransfer.getData("Text");
}
allowDrop = function(ev) {
ev.preventDefault();
}
JSFiddle
Source