可以参考一下这篇文章
http://t.csdn.cn/6Wuem
经测试,该方法存在一个比较隐秘的bug,在中文输入法状态下,输入文字,点击空格键强制插入文字,input框为空,但此时再输入数字时,提示“不能为空,不能删除”,优化方法如“方法二”
问题是如何使用Element UI实现拖拽交换多个输入框的位置。以下是一个可能的解决方案:
<template>
<div>
<el-draggable v-model="inputList">
<el-input v-for="input in inputList" :key="input.key"></el-input>
</el-draggable>
</div>
</template>
<script>
export default {
data() {
return {
inputList: [
{ key: 1, value: '' },
{ key: 2, value: '' },
// 其他输入框...
]
}
}
}
</script>
<template>
<div>
<el-draggable v-model="inputList" @end="handleDragEnd">
<el-input v-for="input in inputList" :key="input.key"></el-input>
</el-draggable>
</div>
</template>
<script>
export default {
data() {
return {
inputList: [
{ key: 1, value: '' },
{ key: 2, value: '' },
// 其他输入框...
]
}
},
methods: {
handleDragEnd() {
// 在这里处理拖拽完成后的逻辑
}
}
}
</script>
handleDragEnd
方法中,你可以根据拖拽的起始位置和目标位置来交换输入框的位置。请注意,每个输入框对象(例如 { key: 1, value: '' }
)应该有一个唯一的键(例如 key
),以便在交换位置时确定它们。<template>
<div>
<el-draggable v-model="inputList" @end="handleDragEnd">
<el-input v-for="input in inputList" :key="input.key"></el-input>
</el-draggable>
</div>
</template>
<script>
export default {
data() {
return {
inputList: [
{ key: 1, value: '' },
{ key: 2, value: '' },
// 其他输入框...
]
}
},
methods: {
handleDragEnd() {
// 获取拖拽后的输入框顺序
const newInputList = this.inputList.map((input, index) => {
input.order = index + 1;
return input;
});
// 根据输入框的order属性排序
newInputList.sort((a, b) => a.order - b.order);
// 更新输入框列表
this.inputList = newInputList;
}
}
}
</script>
通过这个解决方案,你可以实现拖拽交换多个输入框的位置。当你拖拽一个输入框并将其放在另一个输入框的上方时,它们的位置将会交换。请确保在你的表单页面中正确引入Element UI库和相关组件。如果出现问题,请参考Element UI文档或查找相关解决方案。