【发布时间】:2014-11-24 08:27:43
【问题描述】:
我有一个包含两个级别分组的表的特殊情况。我正在处理一些遗留代码,这些代码使用具有交错行的类“组”和“成员”的表构造来显示组的层次结构及其所有关联成员。
这是一个简化的表格:
<table id="my_table">
<thead>
<tr>
<th>column 1</th>
</tr>
</thead>
<tbody>
<tr class="group">
<td>group A</td>
</tr>
<tr class="member">
<td>member A1</td>
</tr>
<tr class="member">
<td>member A2</td>
</tr>
<tr class="group">
<td>group B</td>
</tr>
<tr class="group">
<td>group C</td>
</tr>
<tr class="member">
<td>member C1</td>
</tr>
<tr class="member">
<td>member C2</td>
</tr>
<tr class="member">
<td>member C3</td>
</tr>
<tr class="group">
<td>group D</td>
</tr>
</tbody>
</table>
我正在尝试使用 jQuery sortable 来允许用户将成员表行拖放到表中的所需位置:
$("#my_table tbody").sortable({items: '> .member', forceHelperSize: true });
我可以将“成员”行拖到其他“成员”行中以对其重新排序...该部分工作正常,但我无法拖动“成员”行下面“ D 组”(因为它下面没有“成员”行)。
如果我删除“项目”选项,那么“组”行也可以被拖动——这是我不想要的。
如果尝试移动“组”行,我尝试删除“项目”选项并添加“开始”事件处理程序以取消可排序。
start: function(event, ui) {
if (ui.item.hasClass("group")) {
$(this).sortable('cancel');
}
}
不幸的是,“取消”操作导致:TypeError "null is not an object" (this.helper.outerWidth) 和表格显示损坏(移动的“组”行与其下方的行叠加)。
任何人有另一种方法来抑制“组”行的可拖动性(同时仍然允许将“成员”行拖动到表格中的任何行位置)?
【问题讨论】:
-
将
cancel属性添加到可排序的初始化程序。 stackoverflow.com/a/5683299/1941466。另见api.jqueryui.com/sortable/#option-cancel
标签: jquery jquery-ui jquery-ui-sortable