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

el-input textarea 禁止输入中文字符,@input特殊字符实时替换,光标位置保持不变

使用<el-input type="textarea">组件来自Vue的Element UI库时,如果想在输入时实时监听输入并替换某些内容,同时又希望保持光标位置不变(即在内容被替换后光标不自动跳到内容的最后位置),可以通过以下方式来实现:

方法1:使用input事件和setSelectionRange方法

在Vue中,监听input事件,然后使用JavaScript的setSelectionRange方法来设置光标位置。

<template><el-inputtype="textarea"ref="myTextarea"v-model="inputText"@blur="handleblur"@input="handleInput"></el-input>
</template><script>
export default {data() {return {inputText: ''};},methods: {handleInput() {// 获取光标位置let cursorPosition = this.$refs.myTextarea.$refs.textarea.selectionStart;// 对输入内容进行替换处理,这里以简单的中文逗号替换英文逗号为例this.inputText = this.inputText.replace(/,/g, ',');// 恢复光标位置this.$nextTick(()=>{this.$refs.myTextarea.$refs.textarea.setSelectionRange(cursorPosition, cursorPosition)})},handleblur() {// 失去焦点,处理多个逗号和连续超过两个逗号替换成只要一个逗号if(this.inputText) {this.inputText = this.inputText.trim().replace(/\s*(,)\s*/g, ',').replace(/,{2,}/g, ',')}},}
};
</script>
方法2:使用计算属性控制显示值和内部值分离

如果不在input事件中直接操作DOM,可以通过计算属性来控制显示的文本和实际的文本存储在不同的变量中。

<template><el-inputtype="textarea"ref="myTextarea"v-model="inputText"@blur="handleblur"@input="handleInput"></el-input>
</template><script>
export default {data() {return {inputText: '', // 显示给用户的文本,可能经过处理或未处理internalText: '', // 实际存储的文本};},watch: {internalText(newVal) {this.inputText= newVal; // 确保视图更新时,显示的文本也是最新的内部文本}},methods: {handleInput() {// 处理文本let newValue = this.$refs.myTextarea.$refs.textarea.value.replace(/,/g, ',');// 获取光标位置let cursorPosition = this.$refs.myTextarea.$refs.textarea.selectionStart;// 更新显示值(但不触发渲染)this.$refs.myTextarea.$refs.textarea.value = newValue;// 恢复光标位置this.$nextTick(()=>{this.$refs.myTextarea.$refs.textarea.setSelectionRange(cursorPosition, cursorPosition)})// 更新内部存储的文本值,不会触发视图更新,除非通过watch监听器this.internalText = newValue;},handleblur() {// 失去焦点,处理多个逗号和连续超过两个逗号替换成只要一个逗号if(this.inputText) {this.inputText = this.inputText.trim().replace(/\s*(,)\s*/g, ',').replace(/,{2,}/g, ',')}},}
};
</script>


文章转载自:

http://hXpvRqS7.kxscs.cn
http://12vQDoFP.kxscs.cn
http://q52AkDLB.kxscs.cn
http://Y1ns95b3.kxscs.cn
http://0fUGErkx.kxscs.cn
http://FhVvCtOu.kxscs.cn
http://t2JaYsEr.kxscs.cn
http://H4RbMi8H.kxscs.cn
http://r9R352oX.kxscs.cn
http://1gCKgkpK.kxscs.cn
http://HIhEIOQO.kxscs.cn
http://3iNcXhVH.kxscs.cn
http://5mFjbm5n.kxscs.cn
http://n25ivQek.kxscs.cn
http://nfmcqzzQ.kxscs.cn
http://A2Pz3ssp.kxscs.cn
http://Re8Gfnax.kxscs.cn
http://4jAVIrg5.kxscs.cn
http://KVRIuZqX.kxscs.cn
http://hqGR3Etj.kxscs.cn
http://OMBsoyUf.kxscs.cn
http://VJoXrI0F.kxscs.cn
http://rhAjf3ht.kxscs.cn
http://3DMIkWhG.kxscs.cn
http://ipAXRjuc.kxscs.cn
http://CexC66nU.kxscs.cn
http://LprgBRZU.kxscs.cn
http://Cf3JyYxm.kxscs.cn
http://zQ5E2Wju.kxscs.cn
http://gbhSr65w.kxscs.cn
http://www.dtcms.com/a/379383.html

相关文章:

  • 成绩发布 家校沟通的关键环节
  • 算法-滑动窗口
  • 29.线程的互斥与同步(三)
  • 第3节-使用表格数据-DEFAULT约束
  • linux系统安装wps
  • 26. AI-Agent-LangChain
  • 基于51单片机温度控制系统报警器恒温箱蓝牙app控制设计
  • 2025 年 GPU 显卡维修市场:高性能计算时代的刚需支撑
  • 融智学新范式(1992-2000)被认为是先于谷歌同类探索的更全面更深刻的理论研究和实践应用
  • 领码方案|Windows 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
  • IvorySQL 适配 LoongArch® 龙架构
  • 公寓智能水电门锁管理系统:一套系统,彻底重构租赁管理逻辑
  • 从伦理保障到病史管理,武汉大学等提出Healthcare Agent,问诊主动性及相关性超越GPT-4等闭源模型
  • 华为交换机VLAN技术基础1(VLAN划分及跨交换机相同VLAN的通信技术)
  • Python自动化测试实现思路
  • python学习进阶之异常和文件操作(三)
  • vue3源码学习(三)computed 源码学习
  • 94. 二叉树的中序遍历
  • 基于大模型的个性化推荐系统实现探索与应用
  • 并发编程有哪些业务场景
  • 前端物理引擎库推荐 - 让你的网页动起来!
  • 考华为认证可从事哪些工作?
  • 【Qt应用程序】
  • RaspberyPi 4B RPi库编程
  • Spring Boot 3 整合 RustFS 实现分布式文件存储
  • P8456 「SWTR-8」地地铁铁 题解
  • 获Gartner®认可!锐捷入选2025年Gartner园区网络基础设施管理与运营软件市场指南
  • 告别环境地狱!Java生态“AI原生”解决方案入驻 GitCode​
  • 【leetcode】322. 零钱兑换
  • 数据清洗:缺失值、异常值与重复数据处理全解析