Фильтрация входного текстового поля с использованием jquery вызывает переход курсора в IE и Chrome. - PullRequest
2 голосов
/ 15 августа 2011

Я фильтрую ввод в текстовых полях ввода, например:

И я фильтрую ввод на лету, как удаление нечисловых символов.

$("#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 курсор каждый раз переходит в конец поля ввода.Как я могу предотвратить это или сбросить положение курсора?Я видел код, который делает это для текстовых полей, но не для ввода текстовых полей.

Ответы [ 2 ]

3 голосов
/ 15 августа 2011

Когда вы используете keyup и выполняете регулярное выражение замены (другими словами, устанавливая value), курсор будет прыгать до конца.Если ваша цель состоит в том, чтобы разрешить использование только цифровых клавиш (плюс backspace, delete), попробуйте следующее:

$("#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);
});
0 голосов
/ 02 марта 2018

Вы можете сохранить и восстановить позицию курсора.Таким образом, курсор не перейдет к концу текста

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