Вопрос по javascript – Кнопка Shift удерживается в JavaScript

5

Я написал функцию JS, которая позволяет вводить только цифры. Копия этой функции ниже:

function NumbersOnly(e) {
    var evt = e || window.event;
    if (evt) {
        var keyCode = evt.charCode || evt.keyCode;
        //Allow tab, backspace and numbers to be pressed, otherwise return false for everything.
        //(keyCode>=96 && keyCode<=105) are the numpad numbers        
        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }
}

Эта функция прекрасно работает со всеми числами, но моя проблема возникает, когда удерживается клавиша Shift и нажата одна из цифровых клавиш. Возвращаемое значение - один из символов над числами. Например, если я удерживаю нажатой клавишу Shift и нажимаю 7, "& amp;" возвращается, но код ключа все еще 55 !! Я бы ожидал, что это будет по-другому.

Поэтому мой вопрос: как проверить, удерживается ли клавиша Shift. Я попробовал следующую проверку, но она не сработала:

    if (keyCode === 16) {
        evt.returnValue = false;
    }
    else {

        if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105) || keyCode === 9 || keyCode === 8) {


        }
        else {

            evt.returnValue = false;
        }
    }

Я использую ASP.NET 4.0.

Любая помощь будет принята с благодарностью.

Заранее спасибо.

Если вы укажете evt в console.log, вы увидите атрибут shiftKey, если нажать клавишу Shift, он станет истинным Ranganadh Paramkusam

Ваш Ответ

2   ответа
12

if(evt.shiftKey) {
 ...  //returns true if shift key is pressed
Так какevent является глобальной переменной, соответствующей последнему событию.
@ Саджад, ты упускаешь суть. & APOS; ЭВТ & APOS; просто переменная, 'evt' используется в моем ответе в контексте вопроса, размещенного выше .. см. переменную «at; evt» в вопросе строка :: var evt = e || window.event; Я надеюсь, что вы получите это сейчас.
Brilliant. Это работает. Спасибо за ваше время Sun
ага, понял, вопрос не прочитал. извини - это тожеweirdЯ использовал изeventи работал правильно.
Для меняevt.shiftKey не работает, измените его наevent.shiftKey, Это будет работать.
0

event.key вместоcharCode. No more magic numbers!

function onEvent(event) {
    const key = event.key; // "a", "1", "Shift", etc.
    if (isFinite(key)) { // Is number
        // Do work
    }
};

Mozilla Docs

Поддерживаемые браузеры

Похожие вопросы