код ключа события для амперсанда? - PullRequest
5 голосов
/ 20 июля 2010

Я пытаюсь найти код клавиши для амперсанда и подчеркивания. Я не должен позволять моим пользователям разрешать вводить амперсанды и подчеркивания. Я просматривал один список, и он упоминает 55 как код ключа для 7 и амперсанда, а другой список говорит, что 55 - это код ключа для 7. Поэтому, если я возвращаю false, когда мой пользователь нажимает код 55, я не разрешаю пользователь использует 7, что не является обязательным требованием. Как найти коды клавиш для амперсанда и подчеркивания?

Я только что попробовал с 55, но это только дает мне предупреждение для 7 не с амперсандом!

function noenter(e)
{
    evt = e || window.event;
    var keyPressed = evt.which || evt.keyCode;

    if(keyPressed==13)
    {
        return false;
    }
    else if(evt.shiftKey && keyPressed===55)
//  else if(keyPressed==59 || keyPressed==38 || keyPressed==58 || keyPressed==95)
    {
        alert("no special characters");
        return false;
    }
}

Ответы [ 4 ]

8 голосов
/ 20 июля 2010

Используйте событие keypress и проверьте непосредственно для символа следующим образом. Не связывайтесь с кодами клавиш: они будут различаться в зависимости от типа клавиатуры и культуры. Коды символов не будут.

var el = document.getElementById("your_input");

el.onkeypress = function(evt) {
    evt = evt || window.event;
    var charCode = evt.which || evt.keyCode;
    var charStr = String.fromCharCode(charCode);
    if (charStr == "&" || charStr == "_") {
        alert(charStr);
        return false;
    }
};
2 голосов
/ 20 июля 2010

Проверьте, не нажата ли клавиша Shift:

//e = Event
(e.shiftKey && e.keyCode === 55) //returns true if Shift-7 is pressed
0 голосов
/ 22 ноября 2011

Я решил это, используя идентификатор ключа Unicode.Ниже моя реализация с jQuery:

function parseKey(key) {
    return parseInt(key.substring(2), 10);
}

$inputs.bind('keydown', function(e) {
    var c=parseKey(e.originalEvent.keyIdentifier);
    //allow only numbers and backspace
    if ((c<30 || c>39) && e.which!=8)
        e.preventDefault();
    if (e.which == 13)
        $(this).blur();
});
0 голосов
/ 20 июля 2010

хорошо, понял!это 38!извините за этот вопрос!

...