jQuery:如果帮助程序不是't已成功删除

jQuery: How to stop a helper from being removed if it wasn't successfully dropped

本文关键字:成功 删除 如果 帮助程序 jQuery      更新时间:2023-09-26

我有一个带有自定义helperdraggable。有时辅助对象是一个克隆,有时它是原始元素。

问题是,当辅助对象是原始元素并且被而不是丢弃在有效的可丢弃对象上时,它会被删除。到目前为止,我的解决方案是这样的:

在我的on_dropped回调中,我将ui.helper.dropped_on_droppable设置为true

在draggable的stop回调中,我检查该变量,然后。。。我该怎么办?

$('.my_draggable').draggable({
    stop   : function(e, ui) {
        if (!ui.helper.dropped_on_droppable) {
            /* what do I do here? */
        }
    },

这是正确的方法吗?

好的,我找到了解决方案!它很丑陋,打破了"封装规则",但至少它能起到作用。

请记住这只是针对特殊情况!jQuery可以很好地处理自己的帮助程序删除。在我的例子中,我有一个助手,有时是原始元素,有时是克隆,所以在还原后删除助手并不总是合适的。

element.draggable({
    stop   : function(e, ui) {
        /* "dropped_on_droppable" is custom and set in my custom drop method
           ".moved_draggable" is custom and set in my custom drag method, 
                     to differentiate between the two types of draggables
        */               
        if (!ui.helper.dropped_on_droppable & ui.helper.hasClass('moved_draggable')) {
            /* this is the big hack that breaks encapsulation */
            $.ui.ddmanager.current.cancelHelperRemoval = true;
        }
    },

警告:这会破坏封装,可能无法向前兼容

我可能在这里遗漏了一些东西,但这不仅仅是添加的情况吗

revert: "invalid"

如果可拖动对象是原始元素,而不是克隆元素,则添加到可拖动对象的选项?

我使用了一个自定义助手,它将多个选择可拖动项聚合到一个div中。这似乎与revert功能不一致,所以我提出了这个方案。元素被手动附加回原始父元素,我通过.data().跟踪它

.draggable({
    helper: function() {
        var div = $(document.createElement('div'))
            .data('lastParent', $(this).parent());
        return div;
    },
    start: function() {
        //... add multiple selection items to the helper..          
    },
    stop: function(event,ui) {
        $( $(ui.helper).data('lastParent') ).append( $(ui.helper).children() );
    }
}

这种方法确实失去了漂亮的动画效果,但它可能对你或其他有这个问题的人有用。