Jquery ui 如果内部Dropable不接受Dragable,则防止drop事件传播到父级
我有一个可拖放的Jquery ui 如果内部Dropable不接受Dragable,则防止drop事件传播到父级,jquery-ui,jquery-ui-draggable,jquery-ui-droppable,Jquery Ui,Jquery Ui Draggable,Jquery Ui Droppable,我有一个可拖放的div#space和一组可拖放的li.element。当我在div#space中拖动li.element时,将创建一个新的ul.group,将li.element附加到ul.group中,最后使ul.group可拖放 给定 我希望这些元素的行为如下: 当li.element被放入ul.group中且不包含它时,li.element将被添加到ul.group 当li.element被放入ul.group中确实包含它的li.element时,li.element将恢复到它的原始位置
div#space
和一组可拖放的li.element
。当我在div#space
中拖动li.element
时,将创建一个新的ul.group
,将li.element
附加到ul.group
中,最后使ul.group
可拖放
给定
我希望这些元素的行为如下:
li.element
被放入ul.group
中且不包含它时,li.element
将被添加到ul.group
li.element
被放入ul.group
中确实包含它的li.element
时,li.element
将恢复到它的原始位置li.元素
被放入div#space
(在ul.组
之外)时,如上所述,将创建一个新组ul.group
上时,父div#space
将捕获该事件并创建一个新的组
ul.grpup
有一个accept函数,用于检查可删除项是否为元素以及是否尚未删除
newULGroup.droppable({
drop: ...
accept: function(ui)
{
var isElement = ui.hasClass('element')
var elementId = '.' + ui.data().id
var isAlreadyPresent = $(this).find(elementId).length > 0
return isElement && (!isAlreadyPresent)
},
greedy: true
});
如果不是接受所有内容并忽略drop处理程序中的内容,您将如何实现此行为?(我还没试过,但我想那会管用的)
编辑 试图修复它 我修补了jquery-ui-1.8.4.js以将事件传递给accept函数。现在,我可以使用
$(event).stopPropagation()
停止传播,但我必须手动将可拖动辅助对象设置为动画,使其返回其原始位置以模拟还原,然后将其从dom中删除
accept: function(ui, event)
{
var isCriteria = ui.hasClass('criteria')
var criteriaId = '.' + ui.data().id
var isAlreadyPresent = $(this).find(criteriaId).length > 0
var accepted = isCriteria && (!isAlreadyPresent)
if (event && !accepted)
{
$(event.target).animate(ui.offset(), {complete: function() {$(this).remove()}})
$(event).stopPropagation()
}
return accepted
}
不幸的是,它似乎也破坏了原始元素的可拖动行为。为什么,为什么?我设法实现了类似的行为,尽管使用了未记录的jQuery.ui特性 如果您查看
jquery.ui.draggable
实现(至少对于v1.8.16),那么revert
选项也可以是一个函数。它具有此
为可拖动元素,单个参数为接受拖放的可拖放对象,返回值为布尔值
,用于指示是否恢复可拖动对象
所以在你的情况下,你需要
div#space
和ul.group
始终接受投递并保持贪婪drop
处理程序和流程项目不在该组中时,才检查该项目revert
功能中执行类似的检查,如果它已经在组中,则恢复自身尽管使用了未记录的jQuery.ui特性,我还是设法实现了类似的行为 如果您查看
jquery.ui.draggable
实现(至少对于v1.8.16),那么revert
选项也可以是一个函数。它具有此
为可拖动元素,单个参数为接受拖放的可拖放对象,返回值为布尔值
,用于指示是否恢复可拖动对象
所以在你的情况下,你需要
div#space
和ul.group
始终接受投递并保持贪婪drop
处理程序和流程项目不在该组中时,才检查该项目revert
功能中执行类似的检查,如果它已经在组中,则恢复自身我差不多做到了:我修补了jQuery代码以将事件传递给accept函数。在那里,我调用了
$(event).stopPropagate()
,但它也停止了可拖动的辅助对象以恢复到原始位置。所以我设置了它的动画,并在。。。但是现在原来的li.element
已经不能拖动了!!!救命啊!我差不多做到了:我修补了jQuery代码以将事件传递给accept函数。在那里,我调用了$(event).stopPropagate()
,但它也停止了可拖动的辅助对象以恢复到原始位置。所以我设置了它的动画,并在。。。但是现在原来的li.element
已经不能拖动了!!!救命啊!