Проверка '%' и '(' на JavaScript - PullRequest
5 голосов
/ 13 мая 2011

Приветствую всех.У меня есть следующая функция для проверки ввода в зависимости от того, является ли он числовым, буквенным, буквенно-цифровым и электронным адресом:

  function permite(e, permitidos) {

    var key = e.keyCode || e.which;

    //Validate if its an arrow or delete button
    if((key == 46) || (key == 8) || (key >= 37 && key <= 40))
        return true;

    var keychar = String.fromCharCode(key);

    switch(permitidos) {
        case 'num':
            permitidos = /^[0-9]$/;
            break;
        case 'car':
            permitidos = /^[\sa-zA-Z]$/;
            break;
        case 'num_car':
            permitidos = /^[\sa-zA-Z0-9]$/;
            break;
        case 'correo':
            permitidos = /^[a-zA-Z0-9._\-+@]$/;
            break;
    }

    return permitidos.test(keychar);


 }

Имена переменных написаны на испанском языке, но их легко понять.

Проблемаэто следующее.Код клавиши для «%» 37 такой же, как стрелка влево, а код клавиши для «(» - 40 такой же, как стрелка вправо. Так что моя функция не проверяет «%» и «(», и это отстой. Я не знаючто делать, помогите пожалуйста.

Ответы [ 3 ]

1 голос
/ 13 мая 2011

Событие keypress не запускается для клавиш со стрелками и клавишами удаления, поэтому вы можете просто удалить оператор if. Черт возьми, FireFox!

Вы путаетесь keyCode и charCode, что понятно, потому что event.keyCode на самом деле содержит charCode для keyPress событий, в отличие от keydown и keyup.Код клавиши для ( равен 57 (так же, как и для 9 - эти символы находятся на одной клавише).Его charCode - 40. У клавиш со стрелками нет charCodes, поэтому они не запускают события keypress.(За исключением FireFox ... Argh!)

Лучше всего использовать событие keydown и искать keyCode вместо charCode, проверяя клавиши Shift при необходимости.При нажатии клавиши Shift вам придется вручную сопоставлять коды клавиш с символами.

0 голосов
/ 13 мая 2011

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

//Validate if its an arrow or delete button
if((key == 46) || (key == 8) || (key >= 37 && key <= 40 && !e.shiftKey))
    return true;

Другой вариант (в зависимости от вашего приложения) - обрабатывать keydownсобытие вместо события keypress, которое не приведет к перекрытию кодов клавиш.

0 голосов
/ 13 мая 2011

Немного OT (извинения), но вы можете посмотреть на одну из библиотек Javascript, например, JQuery;почти все они поставляются (или имеют) библиотеки для «проверки ввода».

Например: если вы использовали JQuery, вы можете рассмотреть плагин «Проверка» - http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...