当前位置: 首页 > article >正文

Vue:使用v-model绑定的textarea在光标处插入指定文本

一、问题描述

使用v-model绑定的textarea如果需要改变其内容,一般只要改变v-model对应的变量即可,但如果需要在textarea的当前光标位置插入指定文本,那就需要操作DOM了。于是我们写了一段js:

const insertTextAtCursor = (text) => {
  const textarea = document.querySelector('textarea')
  if (textarea) {
    const startPos = textarea.selectionStart
    const endPos = textarea.selectionEnd
    const value = textarea.value

    const beforeText = value.substring(0, startPos)
    const afterText = value.substring(endPos, value.length)
    const newValue = beforeText + text + afterText
    textarea.value = newValue
    textarea.selectionStart = textarea.selectionEnd = startPos + text.length
  }
}

但如果直接调用上述代码的insertTextAtCursor 函数,就会发现一些古怪的现象,比如下面点击[插入客户昵称],就会在textarea的当前光标处插入指定文本,但实际插入却不理想:
请添加图片描述

二、解决方案

上述问题产生的原因跟textarea.value与v-model直接产生了冲突,于是只要改一下代码:

const insertTextAtCursor = (text) => {
  const textarea = document.querySelector('textarea')
  if (textarea) {
    const startPos = textarea.selectionStart
    const endPos = textarea.selectionEnd
    const value = textarea.value

    const beforeText = value.substring(0, startPos)
    const afterText = value.substring(endPos, value.length)
    const newValue = beforeText + text + afterText
    form.value.next_visit_content = newValue

    nextTick(() => {
      textarea.selectionStart = textarea.selectionEnd = startPos + text.length
    })
  }
}

http://www.kler.cn/a/306370.html

相关文章:

  • Stable Diffusion:照片转视频插件
  • 7天用Go从零实现分布式缓存GeeCache(学习)(3)
  • yolov7论文翻译
  • ODOO学习笔记(3):Odoo和Django的区别是什么?
  • 基于BILSTM及其他RNN序列模型的人名分类器
  • 深度学习服务器租赁AutoDL
  • 爬虫代理API的全面解析:让数据抓取更高效
  • vue part 10
  • ctfshow-web入门-sql注入-web248-UDF 注入
  • Luban策划开源工具
  • 【Vue】- Vue应用
  • RZ7888电机驱动芯片
  • 【2023年】云计算金砖牛刀小试5
  • GitLab权限及设置
  • 【Git】Clone
  • 人工智能(AI)正在以前所未有的速度融入我们生活的方方面面
  • 基于AgentUniverse在金融场景中的多智能体应用探索
  • 学习记录:js算法(三十四):合并 K 个升序链表
  • 计算机网络 ---- 电路交换、报文交换、分组交换
  • 开发后台管理系统-开发环境搭建
  • 【STM32】esp8266通过MQTT连接服务器|订阅发布
  • 10分钟在网站上增加一个AI助手
  • 深入理解 ECMAScript 和 JavaScript
  • 服务器断电重启后报XFS文件系统错误 XFS (dm-0)_ Metadata I_O error
  • Android系列基础知识总结
  • 算力服务器和GPU服务器的区别是什么?