Trying to do a simple drag and drop example in HTML5 - but when I drop the image into the div element I get the following error.
Uncaught TypeError: Cannot set property 'innerHTML' of null
So I assume the error message means dragElement is null. I don't understand why though, because I set it in the dragstart event to be the HTML of the img element.
Anyone know how to make this work?
var dragElement = null;
$('#x').bind('dragstart', function (e) {
dragElement = this;
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/html', this.innerHTML);
});
$('#drop-box').bind('dragover', function (e) {
e.preventDefault();
return false;
});
$('#drop-box').bind('drop', function (e) {
e.preventDefault();
if (e.stopPropagation) {
e.stopPropagation();
}
if (dragElement != this) {
dragElement.innerHTML = this.innerHTML;
this.innerHTML = e.originalEvent.dataTransfer.getData('text/html');
}
return false;
});
Trying to do a simple drag and drop example in HTML5 - but when I drop the image into the div element I get the following error.
Uncaught TypeError: Cannot set property 'innerHTML' of null
So I assume the error message means dragElement is null. I don't understand why though, because I set it in the dragstart event to be the HTML of the img element.
Anyone know how to make this work?
var dragElement = null;
$('#x').bind('dragstart', function (e) {
dragElement = this;
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/html', this.innerHTML);
});
$('#drop-box').bind('dragover', function (e) {
e.preventDefault();
return false;
});
$('#drop-box').bind('drop', function (e) {
e.preventDefault();
if (e.stopPropagation) {
e.stopPropagation();
}
if (dragElement != this) {
dragElement.innerHTML = this.innerHTML;
this.innerHTML = e.originalEvent.dataTransfer.getData('text/html');
}
return false;
});
Share
Improve this question
edited Nov 5, 2019 at 22:18
Brian Tompsett - 汤莱恩
5,88372 gold badges61 silver badges133 bronze badges
asked Nov 18, 2011 at 22:24
PeteGOPeteGO
5,7813 gold badges42 silver badges74 bronze badges
1 Answer
Reset to default 22dataTransfer
is part of the original event object, not the jQuery one. Use e.originalEvent
instead: http://jsfiddle.net/KWut6/.
e.originalEvent.dataTransfer ...
HTML
<image src="http://lorempixum.com/100/100/" draggable="true" id="x">
<div id="drop-box">a</div>
JavaScript
var dragElement = null;
$('#x').bind('dragstart', function (e) {
dragElement = this;
e.originalEvent.dataTransfer.effectAllowed = 'move';
e.originalEvent.dataTransfer.setData('text/html', this.innerHTML);
});
$('#drop-box').bind('dragover', function (e) {
e.preventDefault();
return false;
});
$('#drop-box').bind('drop', function (e) {
e.preventDefault();
if (e.stopPropagation) {
e.stopPropagation();
}
if (dragElement != this) {
dragElement.innerHTML = this.innerHTML;
this.innerHTML = e.originalEvent.dataTransfer.getData('text/html');
}
return false;
});