【发布时间】:2016-09-26 19:02:35
【问题描述】:
我无法让 IE11 支持我在放置区元素上注册的 dragOver、dragLeave 和 drop 事件处理程序。
可拖动项目上的dragStart 处理程序工作正常,放置目标上的mouseover 和mouseout 处理程序也工作正常——只是放置目标上的拖放处理程序不工作。
仅供参考,应该发生的事情是,当您
时,您应该在 F12 工具控制台中看到输出- 开始拖动,
- 拖动放置目标,
- 拖出放置目标,然后
- 放在放置目标上。
此外,当您拖过放置目标时,您应该会看到一个红色的轮廓,当您拖出放置目标时,它会消失。
<!DOCTYPE html>
<html>
<head>
<title>Drag & Drop</title>
<style>
*[draggable=true] { cursor: move; }
.activated { outline: 1px solid red; }
</style>
</head>
<body>
<div><a href="#" draggable="true">Lorem ipsum</a></div>
<div><a href="#" draggable="true">dolor sit amet</a></div>
<div><a href="#" draggable="true">consectetur adipiscing elit</a></div>
<div><a href="#" draggable="true">Curabitur non semper leo</a></div>
<div><a href="#" draggable="true">Pellentesque habitant morbi </a></div>
<div><a href="#" draggable="true">tristique senectus</a></div>
<p class="drop-zone">
Drop Here
</p>
<script>
window.onload = function () {
function findAll(selector) {
const nodeList = document.querySelectorAll(selector);
const nodes = Array.prototype.slice.call(nodeList);
return nodes;
}
findAll('*[draggable=true]').forEach(function (node) {
node.addEventListener('dragstart', function (event) {
const data = node.childNodes[0].nodeValue;
event.dataTransfer.effectAllowed = 'all';
event.dataTransfer.setData('Text', data);
console.log('Drag start: "' + data + '"');
return false;
});
});
findAll('.drop-zone').forEach(function (node) {
node.addEventListener('mouseover', function (event) {
console.log('Mouse over');
node.style.background = 'pink';
});
node.addEventListener('mouseout', function (event) {
console.log('Mouse out');
node.style.background = '';
});
node.addEventListener('dragover', function (event) {
if (event.preventDefault) event.preventDefault();
node.classList.add('activated');
const data = node.childNodes[0].nodeValue;
console.log('Drag over: "' + data + '"');
return false;
});
node.addEventListener('dragleave', function (event) {
if (event.preventDefault) event.preventDefault();
node.classList.remove('activated');
const data = node.childNodes[0].nodeValue;
console.log('Drag leave: "' + data + '"');
return false;
});
node.addEventListener('drop', function (event) {
if (event.preventDefault) event.preventDefault();
node.classList.remove('activated');
const text = node.childNodes[0].nodeValue;
const data = event.dataTransfer.getData('Text');
console.log('Dropped on: "' + text + '"');
console.log(' data: "' + data + '"');
return false;
});
});
};
</script>
</body>
</html>
有什么建议吗?
【问题讨论】:
-
注意,这显然也是 IE10 中的一个问题,但我忽略了这篇文章,并得到了永远可靠的 Elijah Manor 的回答:stackoverflow.com/questions/13742636/…
标签: javascript html drag-and-drop internet-explorer-11