1

デモ: http://jsfiddle.net/py3DE/

$(".source .item").draggable({ revert: "invalid", appendTo: 'body', helper: 'clone',
    start: function(ev, ui){ ui.helper.width($(this).width()); }                    // ensure helper width
});

$(".target .empty").droppable({ tolerance: 'pointer', hoverClass: 'highlight',
    drop: function(ev, ui){
        var item = ui.draggable;
        if (!ui.draggable.closest('.empty').length) item = item.clone().draggable();// if item was dragged from the source list - clone it
        this.innerHTML = '';                                                        // clean the placeholder
        item.css({ top: 0, left: 0 }).appendTo(this);                                // append item to placeholder
    }
});

$(".target").on('click', '.closer', function(){
    var item = $(this).closest('.item');
    item.fadeTo(200, 0, function(){ item.remove(); })
});

ここでの私の目標は、アイテムが .source から取得されて .target にドロップされたときです。ドロップされたドラッグ可能を無効にして、.source からのアイテムの単一のインスタンスのみを .target に配置できるようにしたいと考えています。逆に、アイテムが .target から削除されたら、アイテムを再度有効にしようとしています。

4

2 に答える 2

2

オリジナルのクローンを作成する場合、これを追跡し、クローンを閉じたときにオリジナルに結び付けることができるようにする必要があります。

var mapOrig = [];

$(".source .item:not(.added)").draggable({ revert: "invalid", appendTo: 'body', helper: 'clone',
    start: function(ev, ui){ ui.helper.width($(this).width()); }                    // ensure helper width
});

$(".target .empty").droppable({ tolerance: 'pointer', hoverClass: 'highlight',
    drop: function(ev, ui){
        var item = ui.draggable;
        if (!ui.draggable.closest('.empty').length) {
            var orig = item;           
            item = item.clone().draggable();// if item was dragged from the source list - clone it
            orig.draggable('disable');
            mapOrig.push({item: item, orig: orig});
        }
        this.innerHTML = ''; // clean the placeholder
        item.css({ top: 0, left: 0 }).appendTo(this);                                // append item to placeholder
    }
});

$(".target").on('click', '.closer', function(){
    var item = $(this).closest('.item');
    for(var i = 0; i < mapOrig.length; ++i){
        if(item.is(mapOrig[i].item)){
            mapOrig[i].orig.draggable('enable');
            mapOrig.splice(i, 1);
        }
    }
    item.fadeTo(200, 0, function(){ item.remove(); })
});

http://jsfiddle.net/xmltechgeek/FCj2a/で更新されたフィドルを作成しました。これは、クローンを作成するときに古いアイテムの追跡配列を使用してこれを行う方法を示しています。有効化または無効化の実際のタスクには、jquery の有効化/無効化機能を使用できます。

于 2013-05-28T23:34:48.807 に答える