2

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

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

$("#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 中,光标每次都会跳到输入字段的末尾。如何防止这种情况或重置光标位置?我已经看到了为文本字段而不是输入文本字段执行此操作的代码。

4

2 回答 2

3

当您使用 keyup 并进行正则表达式替换(换句话说,设置value)时,光标将跳到末尾。如果您的目标是只允许数字键(加退格键,删除),试试这个:

$("#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(); 
        }   
    }
});

要取消粘贴时的非数字事件,请将其绑定到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);
});
于 2011-08-15T06:21:37.050 回答
0

您可以保存和恢复光标位置。这样光标就不会跳到文本的末尾

$("#txtlevel").bind('keyup', function(evt)
{
    var pos = evt.target.selectionStart; // Save cursor position
    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);
    evt.target.selectionEnd = pos; // Restore cursor position
}
于 2018-03-02T12:25:50.093 回答