我有可拖动的
- 中,而后者又嵌套在< div>中,如下所示:
<div class='group'>
<div class='header'>
// some stuff here
</div>
<ul>
<li draggable='true'>
Stuff I want to drag and drop to another div.group
</li>
</ul>
</div>
这里有多个
div
元素,我正在尝试实现拖放功能,将一个 div
组中的 li
元素移动到另一个组中。我已经在这里连接了
ondragenter
和 ondragleave
回调: // controller using mithril.js
ctrl.onDragLeave = function () {
return function (event) {
var target;
// Using isDropzone to recursively search for the appropriate div.group
// parent element, as event.target is always the children inside it
if ((target = isDropzone(event.target)) != null) {
target.style.background = "";
}
}
};
ctrl.onDragEnter = function () {
return function (event) {
var target;
if ((target = isDropzone(event.target)) != null) {
target.style.background = "purple";
}
};
};
function isDropzone(elem){
if(elem == null){
return null;
}
return elem.className == 'group' ? elem: isDropzone(elem.parentNode)
}
问题出在回调函数中的
event.target
总是嵌套在 div
内的子元素,例如 li
,因此回调函数会不断地被触发。在这种情况下,我正在使用回调函数更改 div.group
的颜色,导致 div.group
不期望地闪烁。
是否有一种方式可以委托事件,并仅允许处理 li
的 div
祖先来处理事件?或者其他绕过此问题的方法?
编辑:仍然很想知道是否有一种方法可以实现这一点,但现在我正在使用我在这里找到的解决方法。