2

サンプルのショッピング カートのデモに基づいて、jQuery のドラッグ可能およびドロップ可能を実装しました。<li>ドロップ可能からドラッグすると、ドロップ可能から削除できるようにしたいと思います。これはdroppable outイベントと関係があるのではないかと思いましたが、uiパラメーターが空です。誰かが解決策を知っていますか?

4

3 に答える 3

5

これは完全に機能するソリューションであり、完全にテストされていません。おそらくデバッグする必要があります。

デモを見る

編集可能なデモ

$(function () {
    $("#catalog").accordion();
    $("#catalog li").draggable({
        appendTo: "body",
        helper: "clone"
    });
    $("#cart ol").droppable({
        out: function (event, ui) {
            var self = ui;
            ui.helper.off('mouseup').on('mouseup', function () {
                $(this).remove();
                self.draggable.remove();
            });
        },
        activeClass: "ui-state-default",
        hoverClass: "ui-state-hover",
        accept: ":not(.ui-sortable-helper)",
        drop: function (event, ui) {
            if (ui.draggable.is('.dropped')) return false;
            $(this).find(".placeholder").remove();
            $("<li></li>").text(ui.draggable.text()).appendTo(this).draggable({
                appendTo: "body",
                helper: "clone"
            }).addClass('dropped');
        }
    }).sortable({
        items: "li:not(.placeholder)",
        sort: function () {
            // gets added unintentionally by droppable interacting with sortable
            // using connectWithSortable fixes this, but doesn't allow you to customize active/hoverClass options
            $(this).removeClass("ui-state-default");
        }
    });


});
于 2013-04-30T18:06:26.163 に答える
0

A.Wolff のソリューションは私を正しい軌道に乗せましたが、この投稿の Drew のソリューションを介して sortable.out 関数を使用しました: How to remove an item that is pull away from it's list? より良い解決策です

$(function () {
    var removeIntent = false;
    
    $("#catalog").accordion();
    $("#catalog li").draggable({
        appendTo: "body",
        helper: "clone"
    });
    $("#cart ol").droppable({
        activeClass: "ui-state-default",
        hoverClass: "ui-state-hover",
        accept: ":not(.ui-sortable-helper)",
        drop: function (event, ui) {
            $(this).find(".placeholder").remove();
            $("<li></li>").text(ui.draggable.text()).appendTo(this);
        }
    }).sortable({
        items: "li:not(.placeholder)",
        sort: function () {
            // gets added unintentionally by droppable interacting with sortable
            // using connectWithSortable fixes this, but doesn't allow you to customize active/hoverClass options
            $(this).removeClass("ui-state-default");
        },
        over: function () {
            removeIntent = false;
        },
        out: function () {
            removeIntent = true;
        },
        beforeStop: function (event, ui) {
            if(removeIntent == true){
                ui.item.remove();   
            }
        }
    });


});

于 2015-04-10T16:17:42.740 に答える
0

CSS を使用して、リストのスタイルを変更できます。このようなものが動作するはずです:

.ui-droppable .ui-sortable ol { list-style: none outside none; }

またはさらに良い

#cart ol { list-style: none outside none; }

お役に立てれば!

于 2013-04-30T17:40:37.040 に答える