已设置将.替换为purnviraam的函数,如何在textarea中正常插入点号不被转换
问题解决方法
核心问题原因
你现有的代码存在两个核心问题:
- 绑定在textarea上的
keyup事件会在每次按键松开后扫描文本内容,把.替换为purnviraam,没有区分输入场景,所以按钮插入的点号、按shift组合键输入的点号都会被误替换。 - 原始的字符串替换逻辑仅会替换第一个匹配到的点号,无法实现全局替换效果。
修正后代码
JS代码
// 标记是否允许保留点号,默认关闭,常规输入时自动执行替换逻辑 let allowKeepDot = false; $(function() { $('textarea').on("keyup", function(e) { // 按shift键输入、或当前允许保留点号时,跳过替换逻辑 if (e.shiftKey || allowKeepDot) { allowKeepDot = false; return; } const val = $(this).val(); // 全局匹配替换所有常规输入的点号为purnviraam const str = val.replace(/\./g, String.fromCharCode(2404)); $(this).val(str); }); }); function myFunction1() { // 插入点号前开启保留开关 allowKeepDot = true; const textarea = document.getElementById("data"); // 记录当前光标位置,在光标处插入点号而非直接追加到末尾 const start = textarea.selectionStart; const end = textarea.selectionEnd; const value = textarea.value; textarea.value = value.substring(0, start) + '.' + value.substring(end); // 插入后将光标移动到点号后方,符合输入习惯 textarea.selectionStart = textarea.selectionEnd = start + 1; textarea.focus(); }
HTML代码
无需修改原有HTML代码,直接沿用即可。
改动说明
- 新增
allowKeepDot开关变量,点击按钮插入点号时临时开启,替换逻辑检测到开关开启后跳过本次替换,完成操作后自动关闭开关 keyup事件中增加e.shiftKey判断,按下shift键时输入的点号不会被替换- 优化点号插入逻辑,支持在光标当前位置插入,而非只能追加到文本末尾,输入体验更友好
- 修正原始替换逻辑仅替换第一个点号的问题,采用全局正则匹配实现全量替换
内容的提问来源于stack exchange,提问作者Mohammad Suhail
相关产品推荐
相关产品推荐

