在“开始”动态排除可排序项目

时间:2013-07-17 21:37:04

标签: jquery jquery-ui jquery-ui-sortable

我希望能够根据拖动的特定项目“冻结”可排序列表中的某些项目。基本上就是这样:

<ul class="sortable">
   <li class="special">Item 1</li>
   <li>Item 2</li>
   <li class="lock-me">Item 3</li>
</ul>

JS

$( ".sortable" ).sortable({
    start : function(e, ui){
        if(ui.item.hasClass('special')){
            $( ".sortable" ).sortable('option', 'items', ':not(.lock-me)');
        }
    },
    stop : function(e, ui){
        $( ".sortable" ).sortable('option', 'items', 'li');
    }
});

这可能吗?或许还有另一种方法可以解决这个问题?

这是JSFiddle

1 个答案:

答案 0 :(得分:0)

您没有正确使用items选项:

http://jsfiddle.net/4uxXY/

$(function() {
    $( ".sortable" ).sortable({
        items: ':not(.lock-me)'
    });
 });

<击>

阅读你的评论。我误解了。

添加$( ".sortable" ).sortable( "refresh" );为我修复了它。

以下是两个选项:

http://jsfiddle.net/epLYY/

$(function () {
    $(".sortable").sortable({
        items: ':not(.lock-now)',
        start: function (e, ui) {
            console.log('started');
            if (ui.item.hasClass('special')) {
                console.log('item was .special');
                $('.sortable .lock-me').addClass('lock-now');
                $( ".sortable" ).sortable( "refresh" );
            }
        },
        stop: function (e, ui) {
            console.log('stopping');
            $('.sortable .lock-me').removeClass('lock-now');
        }
    });
});

http://jsfiddle.net/4G67x/

$(function() {
    $( ".sortable" ).sortable({
        start : function(e, ui){
            if(ui.item.hasClass('special')){
                $( ".sortable" ).sortable('option', 'items', ':not(.lock-me)').sortable( "refresh" );
            }
        },
        stop : function(e, ui){
            $( ".sortable" ).sortable('option', 'items', 'li');
        }
    });
 });