更新动态排序的jQuery UI
问题描述:
我在无序列表上使用jQuery UI sortable
。我想每一个列表项可排序除了对于具有.active
类中的一个:更新动态排序的jQuery UI
<ul>
<li class="active">Item 1</li> <!-- This item should NOT be sortable -->
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
所以我初始化sortable
这样的:
$("ul").sortable({
items: "li:not('.active')"
});
的问题是,一个点击列表项将.active
类移动到该项目。例如,如果我点击第三项,我得到:
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li class="active">Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
但sortable
似乎并不“通知”指出,改变,所以第三项保持排序。
如何让items
选项连敷在.active
类添加到一个不同的项目,使sortable
处理它我怎么想?
答
您应该动态检查start event中的这一点。
如果目标元素具有active
类,cancel the action:
$('#list').sortable({
items: 'li',
start: function(e, ui){
if (ui.item.hasClass('active')) {
// "return false" does not work - the widget does not seem to consider
// that it should cancel the whole dragging, and enters a broken state.
//
// When this callback is executed, the "start" event is not
// fully handled yet.
// You have to wait for its end, then cancel the action :
setTimeout(function(){
$('#list').sortable('cancel');
}, 0);
}
}
});
fiddle - jQuery的1.8.3,jQuery的UI 1.9.2
聪明!完美工作。谢谢! – daGUY