jquery - 使用jquery过滤输入文本字段导致光标在IE和Chrome中跳转

标签 jquery input cursor-position

我正在过滤输入文本字段中的输入,例如:

我正在动态过滤输入,例如删除非数字字符。

$("#txtlevel").bind('keyup', function(evt)
{
    var value = $(this).val();
    value = value.replace(/\D/g, '');   /* Remove any non-digit characters */
    if ( value.length > 1 )
    {
        value = value.replace(/^[ 0]/g,'');   /* Remove any leading spaces or zeros */
    }
    $(this).val(value);
}

这在 Firefox 中效果很好,但在 IE 和 Chrome 中,光标每次都会跳到输入字段的末尾。如何防止这种情况或重置光标位置?我见过为文本字段执行此操作的代码,但没有为输入文本字段执行此操作。

最佳答案

当您使用 keyup 并执行正则表达式替换(换句话说,设置)时,光标将跳到末尾。如果您的目标是仅允许数字键(加上退格键、删除键),请尝试以下操作:

$("#txtlevel").bind('keydown', function(event) {
    // Allow only backspace, delete, left and right arrows, return and tab
    if (event.keyCode == 46 || 
        event.keyCode == 8 || 
        event.keyCode == 37 || 
        event.keyCode == 39 || 
        event.keyCode == 13 || 
        event.keyCode == 9) {
        // let it happen
    }
    else {
        // stop the keypress if not a number
        if (event.keyCode < 48 || event.keyCode > 57 ) {
            event.preventDefault(); 
        }   
    }
});

要取消粘贴时的非数字事件,请将其绑定(bind)到 paste 事件:

$("#txtlevel").bind('paste', function(e){ 
    var value = $(this).val();
    value = value.replace(/\D/g, '');   /* Remove any non-digit characters */
    if ( value.length > 1 ) {
        value = value.replace(/^[ 0]/g,'');   /* Remove any leading spaces or zeros */
    }
    $(this).val(value);
});

关于jquery - 使用jquery过滤输入文本字段导致光标在IE和Chrome中跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062090/

相关文章:

bash - 我实际上可以使用 ANSI 转义序列保存多个光标位置吗?

jquery - 不是立即打开 X 对话框,而是使用通用代码行

javascript - 有没有办法 "onload"在文本区域中打开 TXT 文件并在关闭或 URL 更改时自动保存它?

input - 如何将数据直接流式传输到 tensorflow 中,而不是读取光盘上的文件?

java - 根据用户输入显示乘法表

javascript - 设置来自Ajax的自定义HTML5字段验证消息

javascript - JVector Map如何在标记悬停时获得动态图像

javascript - 使用 JavaScript 仅查找可见元素

macOS:模拟鼠标事件仅在启动二进制文件时有效,而不是应用程序包

forms - 如何在 xamarin 表单中手动更改条目的光标位置?