【发布时间】:2020-08-13 00:02:49
【问题描述】:
我在拖放动态生成的表格时遇到了困难。该界面根据用户选择呈现表格行和单元格的网格。
我想做的是让用户能够将一个单元格、一个 div 或 span 的内容拖到另一个单元格中。
近 6 年前的这段对话与我想要做的很接近。但它无法处理表具有动态添加的行的情况。 Drag and Drop table cell contents
$(function() {
$('.event').on("dragstart", function(event) {
var dt = event.originalEvent.dataTransfer;
dt.setData('Text', $(this).attr('id'));
});
$('table td').on("dragenter dragover drop", function(event) {
event.preventDefault();
if (event.type === 'drop') {
var data = event.originalEvent.dataTransfer.getData('Text', $(this).attr('id'));
de = $('#' + data).detach();
de.appendTo($(this));
};
});
$('#addRow').on('click', function() {
$('#targetTable > tbody:last-child').append('<tr><td></td><td></td><td></td></tr>');
});
});
这个基于该代码的示例演示了我的问题。 https://jsfiddle.net/Stormjack/osvu6mea/11/
您可以成功地将蓝色块拖放到前两行中的任何单元格中。但是使用“添加行”按钮添加一个新行,您不能将该块放入任何新行。您仍然可以将可拖动范围移动到前两行中的不同单元格。但它无法拖入新行。
我怎样才能克服这个限制?我很乐意使用 HTML5 或 JavaScript 或 jQuery 或其他客户端库的任意组合。感谢您的帮助。
这是我的解决方案,基于 saintvixalien 的帮助。
$(function() {
initDragAndDrop();
$('#addRow').on('click', function() {
$('#targetTable > tbody:last-child').append('<tr><td></td><td></td><td></td></tr>');
clearDragAndDrop();
initDragAndDrop();
});
});
function clearDragAndDrop() {
$('.event').off();
$('table td').off('dragenter dragover drop');
}
function initDragAndDrop() {
$('.event').on('dragstart', function(event) {
var dt = event.originalEvent.dataTransfer;
dt.setData('Text', $(this).attr('id'));
});
$('table td').on('dragenter dragover drop', function(event) {
event.preventDefault();
if (event.type === 'drop') {
var data = event.originalEvent.dataTransfer.getData('Text', $(this).attr('id'));
de = $('#' + data).detach();
de.appendTo($(this));
}
});
}
【问题讨论】:
标签: javascript html jquery drag-and-drop