【发布时间】:2022-01-11 11:49:37
【问题描述】:
我有许多 jQuery UI 可排序的父元素。每个父元素最多可以包含一个可放置的子元素,因此:
- 如果容器为空,它应该能够从任何其他容器接收可放置元素
- 如果容器不是空的:
- 它应该无法从另一个容器接收可放置元素
- 但当前子元素应该可以拖放到任何其他空父元素
为了帮助实现这一点,所有父元素都具有类drop_target_cell,而空父元素具有类empty_drop_target_cell。这些会随着可放置元素的分配而更新。
为了实现这一点,我尝试在用户开始拖动可放置元素时禁用类 drop_target_cell 但不是类 empty_drop_target_cell 的任何元素,然后在拖动操作时重新启用类 drop_target_cell 的所有元素完成。然而,这并不像我预期的那样工作;仍然可以将可放置元素拖到已经有子元素的父容器中。
以下是我的最大努力,添加了背景颜色更改,这些更改(正确)指示在拖动开始时应禁用哪些父元素:
$("#available_sections, td.drop_target_cell").sortable({
connectWith: "#available_sections, td.drop_target_cell",
start: function (event, ui) {
$("td.drop_target_cell:not(td.drop_target_cell.empty_drop_target_cell)").css('background-color', '#ff00ff');
$("td.drop_target_cell:not(td.drop_target_cell.empty_drop_target_cell)").sortable("disable");
},
stop: function (event, ui) {
$("td.drop_target_cell").css('background', 'none');
$("td.drop_target_cell").sortable("enable");
}
});
$("td.drop_target_cell").on("sortremove", function (event, ui) {
$(this).addClass('empty_drop_target_cell');
});
$("td.drop_target_cell").on("sortreceive", function (event, ui) {
$(this).removeClass('empty_drop_target_cell');
});
有没有更好的方法,或者我可以改变什么来让它工作?
【问题讨论】:
标签: jquery jquery-ui jquery-ui-sortable