javascript - 替换 keyup 上的值时重置 'input' 元素的光标位置

标签 javascript jquery html regex

我需要我的正则表达式来接受箭头键、字母和数字。我得到了字母和数字,但我卡在了箭头键上。到目前为止我有这个。

var patt = /[^a-zA-Z0-9]+/g;
var helper;
$('#name').keyup(function(e){
    helper = $('#name').val();
    helper = helper.replace(patt,' ');
    $('#name').val(helper);
});

感谢您的帮助。

最佳答案

问题是当 keyup 事件被触发时,您要替换元素的整个值。这样做时,光标将始终重置到末尾。

要解决此问题,您可以通过访问 selectionStart property 来捕获光标的初始位置。的元素。然后在替换该值后,您可以简单地将其设置回原来的位置:

这是一个纯 JS 示例,展示了这一点:

document.getElementById('name').addEventListener('input', function() {
  var position = this.selectionStart;
  
  this.value = this.value.replace(/[^a-zA-Z0-9]+/g, '');
  this.selectionEnd = position;
});
<input id="name" type="text" />

同样,jQuery 版本也是一样的。我还将 keyup 事件更改为 input 事件,以便仅在值实际更改时触发该事件。

$('#name').on('input', function(e) {
  var position = this.selectionStart;

  this.value = this.value.replace(/[^a-zA-Z0-9]+/g, '');
  this.selectionEnd = position;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="name" type="text" />

作为替代方案,您也可以只监听 change 事件,然后替换值;但是,这不会在 输入时更新值。

关于javascript - 替换 keyup 上的值时重置 'input' 元素的光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35400504/

相关文章:

javascript - 在谷歌应用程序脚本中使用 isBlank() 来标记列

javascript - 如何让自定义跟随光标跟随Y轴滚动

javascript - 在 jQuery 中动画/应用转换 addClass 和 removeClass?

javascript - 如何调整选项中特定文本的大小或应用样式

jquery - 在 li hover 中移动背景颜色

javascript - 如何使用 javascript 或 jquery 提醒所选选项?

html - 位置 :fixed navigation header overlapping browser scroll bar when using overflow-x

javascript - 禁用按钮/防止编辑

javascript - console.log(JSON.parse(result)) 在我期望看到 JSON 的地方打印 [Object]

jquery - 重命名 a :after, a :hover, a