1
$('.batch_listing').sortable({
    forcePlaceholderSize: true,
    forceHelperSize: true,
    placeholder: 'photo_ghost',
    helper: 'clone',
    receive: function(event, ui) 
    { 
        if(!is_in_batch(ui.item.children("a").children("img").attr("data-photo-id"))) 
        { 
            add_to_batch_dispatch(ui.item.children("a").children("img").attr("data-photo-id"));
        } else { 
            //Remove from batch
            $(this).sortable("cancel");
            alert("shouldn't be added");
        }
    },
    sort: function(event, ui) {
        if(placing == false) 
        {
            $(".destory_drop").fadeIn();
        }
    },
    stop: function(event, ui) { 
        if(removing == false)
        {
            $(".destory_drop").fadeOut();
        }
    }
}).disableSelection();

このソート可能に接続されている一連のドラッグ可能なものがあります。

$("#photo_browser li").draggable({
    snap: false,
    revert: 'invalid',
    helper: 'clone',
    appendTo: "body",
    cursor: 'move',
    opacity: 0.5,
    connectToSortable: "ul.batch_listing",
    start: function(e, ui){
        placing = true;
    }, 
    stop: function(e, ui){
        placing = false;
    }
});

コード自体は正しく機能しています。is_in_batch と add_to_batch_dispatch は、アイテムから ID をログに記録し、それが既にソート可能に存在するかどうかを確認するだけです。ただし、 を呼び出すたびに$(this).sortable("cancel")、ドラッグ可能なものはソート可能なものにドロップされます (コード内のテストアラートが呼び出されます)。

もともと、これはどこかで停止する前に機能していました。私はその理由を見つけるために何時間も費やしてきたので、助けていただければ幸いです。

4

1 に答える 1

0

それ以外の

$(this).sortable("cancel");

試す

return false;
于 2012-07-25T12:07:57.217 に答える