我希望能够根据拖动的特定项目“冻结”可排序列表中的某些项目。基本上就是这样:
<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
答案 0 :(得分:0)
您没有正确使用 items
选项:
$(function() {
$( ".sortable" ).sortable({
items: ':not(.lock-me)'
});
});
击> <击> 撞击>
阅读你的评论。我误解了。
添加$( ".sortable" ).sortable( "refresh" );
为我修复了它。
以下是两个选项:
$(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');
}
});
});
$(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');
}
});
});