2015-11-09 3 views
0

У меня есть следующий код, и я пытаюсь разрешить только 3 цифры 0-9 на входе, но все же позволяю пользователю использовать клавиши со стрелками, backspace и delete.Клавиатура JavaScript Key Code 0 в Firefox

Он работает в других браузерах, но в firefox вывод на консоль показывает клавиши со стрелками и ключ удаления, регистрирующий как код клавиши 0. Что дает?

Код:

$input. 
    keypress(function(e) { 
     var currentLength = $input.val().length; 
     var c = e.which; 
     console.log("key", c); 
     //0=48, 9=57, 37-40 = arrow keys 8= backspace, 46=delete 
     if (c === 8 || c === 46 || (c >= 37 && c <=40)) { 
      //delete, backspace, and arrow keys are allowed 
     } else if (c < 48 || c > 57 || currentLength >= 3) { 
      e.preventDefault(); 
     } 
    }).on("paste", function(e) { 
     e.preventDefault(); 
    }); 

Fiddle: http://jsfiddle.net/2cjpdfcy/

+0

На минорной ноте, событие «вход» будет срабатывать только для ключей, которые изменяют значение входного сигнала, поэтому вам не придется заботиться о клавиш со стрелками. – Taplar

+0

@Taplar Это отличное предложение, но, к сожалению, я все еще поддерживаю IE 8 :(Спасибо, хотя! – thatidiotguy

ответ

1

Заменить это:

var c = e.which; 

с:

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

И все будет работать.

http://jsfiddle.net/2cjpdfcy/2/

+0

Знаете, почему это так? – thatidiotguy

+0

@thatidiotguy http://stackoverflow.com/questions/4471582/javascript-keycode-vs-which –

+0

Но я использую jQuery и ' который '..... – thatidiotguy

1

Чтобы получить все коды клавиш использовать keyup вместо keypress:

$input.keyup(function(e) { 
    // your logic... 
}); 

Updated fiddle

+0

Так что это определенно работает, но не могли бы вы объяснить, почему это так? Что такое событие keyup? есть комментарии к решению Sergio, которое также работает? – thatidiotguy

Смежные вопросы