javascript - 输入事件上的正则表达式和 Jquery 问题
问题描述
使用正则表达式仅允许某些字符时遇到问题。问题是当我尝试将字符插入单词以纠正错误时。当我尝试插入新字符时,光标移动到输入框的末尾。
这是我使用的代码:
$('body').on('input','.info',function() {
this.value = this.value.replace(/[^a-zA-Z0-9+&,*_\- \b \r ]/g, '');
有什么提示吗?
先感谢您
解决方案
您需要保存字符索引 (the selectionStart
),以便在值更改完成后重新定位到它,如果需要进行值更改:
$('body').on('input', '.info', function(e) {
const index = this.selectionStart - 1;
const replaced = this.value.replace(/[^a-zA-Z0-9+&,*_\- \b \r ]/g, '');
if (replaced !== this.value) {
this.value = replaced;
this.selectionStart = index;
this.selectionEnd = index;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="info">
推荐阅读
- javascript - 使用量角器 + appium 运行 android app 测试
- c++ - 将 Vulkan 与 SFML 一起使用?
- android - 错误:找不到 exifinterface.jar (com.android.support:exifinterface:27.1.1)
- javascript - 使用 mount() 反应酶,显示来自父级 .html() 的元素,但没有找到带有 .find() 的元素
- scala - 如何使用 Scala 在 Spark 中对 Row 类型的 RDD 进行拆分
- python - 在 qgs Composer 图例中仅显示过滤层 - PyQgis
- jsp - spring boot jsp c:set不使用没有类型的原始值
- java - 先执行服务器调用,然后执行下一行代码
- angular - 如何从角度的SVG图标生成webfont
- node.js - 带有 Puppeteer 的 Headless Chromium 在 Amazon Linux AMI 上不起作用