jquery - 在 droppable 事件发生时将 jQuery 可拖动对象恢复到其原始容器

标签 jquery jquery-ui

我有一个可拖动的项目,如果不将其放入可放置的项目中,它将恢复。在用户将某个项目放入可放置对象之前,此方法效果很好。如果他们认为在任何时候将可拖动的东西拉出来时犯了一个错误,那么它就会恢复为可放置的。我希望在退出并停用可拖动项后返回到其原始容器。

我的代码如下,但我提供了a sample on jsFiddle .

HTML

<div id="origin">
    <div id="draggable" class="ui-widget-content">
        <p>I revert when I'm not dropped</p>
    </div>
</div>
<div id="droppable" class="ui-widget-header">
    <p>Drop me here</p>
</div>

JavaScript

$(function() {
    $("#draggable").draggable({ 
        revert:  function(dropped) {
           var dropped = dropped && dropped[0].id == "droppable";
           if(!dropped) alert("I'm reverting!");
           return !dropped;
        } 
    }).each(function() {
        var top = $(this).position().top;
        var left = $(this).position().left;
        $(this).data('orgTop', top);
        $(this).data('orgLeft', left);
    });

    $("#droppable").droppable({
        activeClass: 'ui-state-hover',
        hoverClass: 'ui-state-active',
        drop: function(event, ui) {
            $(this).addClass('ui-state-highlight').find('p').html('Dropped!');
        },
        out: function(event, ui) {
                // doesn't work but something like this
                ui.draggable.mouseup(function () {
                var top = ui.draggable.data('orgTop');
                var left = ui.draggable.data('orgLeft');
                ui.position = { top: top, left: left };
            });
        }
    });
});

最佳答案

$(function() {
    $("#draggable").draggable({
        revert : function(event, ui) {
            // on older version of jQuery use "draggable"
            // $(this).data("draggable")
            // on 2.x versions of jQuery use "ui-draggable"
            // $(this).data("ui-draggable")
            $(this).data("uiDraggable").originalPosition = {
                top : 0,
                left : 0
            };
            // return boolean
            return !event;
            // that evaluate like this:
            // return event !== false ? false : true;
        }
    });
    $("#droppable").droppable();
});

关于jquery - 在 droppable 事件发生时将 jQuery 可拖动对象恢复到其原始容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735270/

相关文章:

javascript - 当关键片段 'form'标签不再存在时,如何测试提交的内容?

javascript - 类似于输入中的子菜单,单击并在失去焦点时将其关闭

jquery - 我应该如何使用/计数 jQuery .find()

javascript - jQuery UI Spinner 与输入类型 ="number"

jquery - 调用 fnSort 会破坏 jQuery UI 选项卡样式

jquery - Bootstrap 删除警报的不透明度

javascript - jQuery ui 日历下个月按钮

jquery - 拖放多个带有选项的选择

javascript - 自动完成 JQuery-UI 未定义列表

javascript - 如何将 javascript 变量设置为 Rails 模型中的列表?