javascript - 无法在 mouseup 事件中删除元素

标签 javascript jquery

这是我编写的用于一次拖动多个项目的 jQuery 代码。它现在可以拖动但不能放下。

这是代码

    $(document).on('click', function (e) {
        var target = e.target;
        if (!$(target).hasClass('a')) $('.selected').removeClass('selected');
    });
    $(document).delegate('.a', 'dblclick', function (e) {
        $(this).addClass('selected');
    });

    $(document).delegate('.selected', 'mousedown', function (e) {
        var div = $('<div></div>');
        $('.selected').each(function () {
            div.append($(this).clone());
        });
        div.prop('id', 'currentDrag');
        $('#currentDrag').css({
            left: e.pageX + "px",
            top: e.pageY + "px"
        });
        $('body').append(div);
    });

    $(document).on('mouseup', function (e) {
        var tgt = e.target;
        var mPos = {
            x: e.pageX,
            y: e.pageY
        };
        $('.drop').each(function () {
            var pos = $(this).offset(),
                twt = $(this).width(),
                tht = $(this).height();
        });
        if((mPos.x > pos.left) && (mPos.x < (pos.left + twt)) && (mPos.y > targPos.top) && (mPos.y < (pos.top + tht))) {
            $(this).append($('#currentDrag').html());
        }
        $('.drop .selected').removeClass('selected');
        $('#currentDrag').remove();
    });
    $('.drop').on('mouseup', function (e) {
        $(tgt).append($('#currentDrag').html());
        $('.drop .selected').removeClass('selected');
        $('#currentDrag').remove();
    });

    $(document).on('mousemove', function (e) {
        $('#currentDrag').css({
            left: e.pageX + "px",
            top: e.pageY + "px"
        });
    });

我的代码有什么问题,我该如何解决。这是 fiddle http://jsfiddle.net/mDewr/27/

最佳答案

我真的建议尝试找到一种方法让 jQuery UI draggabledroppable 库为您工作。那么问题就变成了, 类似于这个:How do I drag multiple elements with JavaScript or jQuery?

以下是我们如何将该问题的答案之一应用于您的问题。我正在使用 jQuery UI multiple draggable plugin ,其完整脚本可在此处找到:jquery.ui.multidraggable-1.8.8.js

首先让我们简化您的 HTML。通过将可拖放的 div 放入元素中,我们不必为每个元素应用冗余样式。相反,我们可以使用包含元素来设置样式

HTML

<div id="parent">
    <div id="dragTargets">
        <div>123</div>
        <div>456</div>
        <div>789</div>
    </div>
    <div id='dropTargets'>
        <div></div>
        <div></div>
    </div>
</div>

使用该插件,我们可以在每个拖动 div 上调用 multidraggable。并且 droppable 可以放在任何地方

JavaScript

$("#dragTargets div").multidraggable();
$("#dropTargets div").droppable();

自定义

我们可以通过样式来控制外观。例如,我们会将任何可以接收掉落物的东西设为黄色,将要掉落的任何东西设为红色,将任何接收到元素的东西设为绿色

下面是 CSS 中的一些样式示例

.ui-state-highlight { background: green; }
.ui-state-active { background: yellow; }
.ui-state-hover { background: red; }

我们将控制何时使用 JavaScript 应用这些类:

$("#dropTargets div").droppable({
    activeClass: "ui-state-active",
    hoverClass: "ui-state-hover",
    drop: function () {
        $(this).addClass("ui-state-highlight")
    }
});

可多次拖动

您应该为当前选定的元素设置样式。该脚本会将 ui-multidraggable 类应用于所有当前选定的元素。以下 CSS 将使用户明白他们的选择已被选中。

.ui-multidraggable {
    background: tan;
}

查看此演示。只需按住 ctrl 即可选择多个 div,然后一次拖动所有这些。

jsFiddle

关于javascript - 无法在 mouseup 事件中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798974/

相关文章:

javascript - secret .JS 代码 - Predictad_myLoc ='' ;

javascript - Google Orgchart 创造婚姻

javascript - 如何在firebase上执行sql "LIKE"操作?

javascript - 将 JSON 元素包装在 HTML 中

javascript - Firefox 中的 setTimeout 延迟

javascript - 在运行时将字符串附加到 DOM 并在 X 秒后将其删除

javascript - 使用带有 XML 数据的 jQuery 生成表格

javascript - Tripadvisor 小部件在 ajax 页面加载时无法加载

jquery - 改变开关位置行为

javascript - jquery 目标文本节点以 (string1) 开头并以 (string2) 结尾