Разрешение определенных клавиш через нажатие клавиши числового текстового поля, событие keyup - PullRequest
2 голосов
/ 10 июня 2011

Вот мой код, и он использует клиентскую библиотеку asp.net ajax для добавления обработчиков событий

function IsDigit(id) { //short variable,args name for best minification
    if ($get(id)) {
        var v = function (e) {
                var r = /\d/;
                if (!r.test(String.fromCharCode(e.keyCode))) e.preventDefault();
            }
        $addHandlers($get(id), {
            keydown: v
        });
    }
}

$get(ID) получает контроль с идентификатором $addHandlers добавляет событие Обработчики в элемент управления. Здесь я прикрепляю его к элементу управления с идентификатором id. Все это хорошо работает, текстовое поле принимает только числовой ввод, но проблема в том, когда он хочет удалить все числовые значения и хочет ввести некоторые другие числа. Так что-то вроде [SHFT + HOME], а затем удалить, [Удалить] не работают. Пожалуйста, может кто-нибудь улучшить код лучше. Также Keydown оптимален для такой работы Я временно решил это, выполнив это, но это позволяет неожиданным символам на короткую секунду затем удалить его

function IsDigit(id) { //short variable,args name for best minification
    if ($get(id)) {
        var p = "";
        var v = function (e) {
                var r = /^\d*$/;
                if (r.test(this.value)){p = this.value;} else {this.value=p;}// e.preventDefault();
            }
        $addHandlers($get(id), {
            keyup: v
        });
    }
}

1 Ответ

0 голосов
/ 21 июня 2011

Вместо того, чтобы пытаться выполнить проверку onkeydown / onkeyup, вам может оказаться проще проверить onblur.Таким образом, вам не нужно беспокоиться о различных сочетаниях клавиш, которые кто-то может использовать для выбора / удаления / повторного ввода текста, например, ctrl + клавиши со стрелками, ctrl + v для вставки текста, ctrl + a для выбора всех.

Вы всегда можете использовать новый HTML5 <input type="number"> для ограничения ввода, а затем использовать Modernizr , чтобы добавить код обработчика событий для браузеров, которые не поддерживают новый тип ввода:

if (Modernizr.inputtypes.number) {
    ...
    // Add your code in here
    ...
}    
...