You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中Draggable组件内嵌Textarea的文本选中冲突问题

解决Vue Draggable内嵌Textarea无法选中文本的问题

针对Draggable组件内嵌Textarea时,选中文本触发拖拽的问题,提供以下几种实用解决方案:

方法1:阻止Textarea的事件冒泡

通过阻止Textarea上的鼠标按下和选中文本事件冒泡,避免Draggable触发拖拽逻辑:

<draggable v-model="yourList">
  <div v-for="item in yourList" :key="item.id" class="draggable-item">
    <textarea
      v-model="item.text"
      @mousedown.stop
      @selectstart.stop
    ></textarea>
  </div>
</draggable>
  • @mousedown.stop:阻止鼠标按下事件向上冒泡到Draggable组件,避免触发拖拽启动逻辑
  • @selectstart.stop:确保选中文本的原生行为不受拖拽事件干扰

方法2:指定拖拽触发的专属区域

利用Draggable的handle属性,仅允许点击特定元素时触发拖拽,Textarea区域不响应拖拽:

<draggable v-model="yourList" handle=".drag-handle">
  <div v-for="item in yourList" :key="item.id" class="draggable-item">
    <!-- 拖拽手柄 -->
    <span class="drag-handle">⋮⋮</span>
    <textarea v-model="item.text"></textarea>
  </div>
</draggable>

<style scoped>
.drag-handle {
  cursor: grab;
  margin-right: 8px;
}
</style>

这种方式更符合用户交互习惯——只有点击明确的拖拽手柄时才会触发拖拽,Textarea区域专注于文本编辑。

方法3:根据Textarea焦点状态动态禁用拖拽

当Textarea获得焦点时,临时禁用Draggable的拖拽功能,失去焦点后恢复:

<draggable v-model="yourList" :disabled="textareaFocused">
  <div v-for="item in yourList" :key="item.id" class="draggable-item">
    <textarea
      v-model="item.text"
      @focus="textareaFocused = true"
      @blur="textareaFocused = false"
    ></textarea>
  </div>
</draggable>

<script>
export default {
  data() {
    return {
      yourList: [],
      textareaFocused: false
    }
  }
}
</script>

这种方案可以在文本编辑期间完全禁用拖拽,避免误触,适合对交互精度要求较高的场景。

内容的提问来源于stack exchange,提问作者Turgunov Sardor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 14:39:50