Есть пара вопросов. Во-первых, ваша дропзона должна отменить событие при перетаскивании:
<ol dropzone="move s:text/plain" ondrop="dropHandler(event)" ondragover="dragOverHandler(event)">
function dragOverHandler(event) {
event.preventDefault();
return false;
}
Во-вторых, ваша функция-обработчик dropHandler
будет запущена несколько раз, потому что цель отбрасывания в большинстве случаев будет элементом li
, а не ol
(и, возможно, также div
, но я проигнорировал этот элемент). Поэтому добавьте код для обработки события только в ol
или отмените событие в dropHandler
с помощью stopPropagation
.
Наконец, действие по умолчанию (по крайней мере в Firefox, не проверяющее другие браузеры) при удалении элемента - попытаться перейти к URL-адресу, представленному значением text/plain
, поэтому вам следует добавить немного event.preventDefault()
в вероятных местах. Вот обновленная функция dropHandler
:
function dropHandler(event) {
var li = document.createElement('li');
var data = event.dataTransfer.getData(internalDNDType);
if (data == 'fruit-apple') {
li.textContent = 'Apples';
} else if (data == 'fruit-orange') {
li.textContent = 'Oranges';
} else if (data == 'fruit-pear') {
li.textContent = 'Pears';
} else {
li.textContent = 'Unknown Fruit';
}
event.target.appendChild(li);
event.stopPropagation();
event.preventDefault();
return false;
}
Вот моя обновленная версия .