【发布时间】:2015-11-02 05:55:14
【问题描述】:
我将可拖动的 li 元素嵌套在 ul 中,而这些元素又嵌套在 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 处理事件?或任何其他解决此问题的方法?
编辑:仍然很想知道是否有办法做到这一点,但现在我正在使用我找到的解决方法here。
【问题讨论】:
-
你把这些处理程序也附加到了哪里?
标签: javascript draggable mithril.js