拖拽排序后数据没更新怎么办?
我用原生 JS 实现了一个简单的列表拖拽排序,视觉上元素位置变了,但绑定的数据数组根本没变,后续提交表单还是按原始顺序传的,这咋整?
我试过在 drop 事件里手动交换数组项,但总感觉索引对不上,有时候还报错。是不是得在拖拽过程中就同步更新数据?
这是我的关键代码:
function handleDrop(e) {
const draggedId = e.dataTransfer.getData('text/plain');
const draggedEl = document.getElementById(draggedId);
const targetEl = e.target.closest('li');
if (targetEl && targetEl !== draggedEl) {
targetEl.parentNode.insertBefore(draggedEl, targetEl.nextSibling);
// 这里怎么同步更新 data 数组?
}
}
Array.from(parent.children)获取当前DOM顺序对应的数组,然后根据元素在DOM中的位置计算索引,用 splice 移动数组项:核心就一句:DOM变了你得知道对应数组里的哪一项,然后手动调数组的 splice,别指望DOM自动帮你同步。