Мне нужна помощь в очистке популярного кусочка ванильного кода JavaScript, который вызывает проблемы в Firefox.Только для номера JavaScript-решение для Firefox
Следующий, который/keyCode проверяет, похоже, на самое популярное решение VanS JS, чтобы разрешить только номера в input
или textarea
.
var charCode = (e.which) ? e.which : e.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
return true;
Вызывается с помощью onkeypress="return function(event);"
по тегу.
Тем не менее, Firefox, по-видимому, связывает клавиши со стрелками с номерами onkeypress
, а не только onkeyup
и onkeydown
, как и другие браузеры. Это означает, что, например, клавиша левой клавиши charCode
- 37
, но также и charCode
для% (shift + 5). Что еще более важно, это означает, что клавиши со стрелками нельзя использовать для навигации (перемещение курсора/текста курсора влево или вправо).
Однако разница в том, что левая клавиша стрелка имеет keyCode 37
, в то время как% имеет charCode
и which
из 37
(как показано на http://www.asquare.net/javascript/tests/KeyCode.html). Так что я был в состоянии сделать клавиши со стрелками работают нормально, выполнив следующие действия:
if (charcode > 31 && (charcode < 48 || charcode > 57)) {
if (e.keycode && e.keyCode > 36 && e.keyCode < 41) {
return true;
}
return false;
}
return true;
Однако, я чувствую, что это не самый лучший и чистый способ сделать это, и что там может быть несколько ключей обрабатываются по-разному Firefox, а не только клавиши со стрелками. Что было бы более чистым решением для решения проблемы с Vanilla JS или способом проверки по меньшей мере клавиш со стрелками в этой функции?
Большое спасибо!
EDIT: Я просто понял, что даже если код решает его для Firefox, он вводит новую проблему для всех остальных браузеров, в том, что они позволяют теперь charCodes 37-40 (т.е.%), которые будут введены. Кажется, что вместо проверки keyCode
ему необходимо было бы проверить charCode
или which
, иначе таким же образом.
Вы знаете, что есть ' '?Обратите внимание, что это не так удобно для блокировки определенных ключей: они могут подумать, что их клавиатура сломана. Кроме того, они все равно могут использовать copy/paste (даже через контекстное меню), поэтому вы никогда не закончите. Лучше просто принять пользовательский ввод, как есть, и проверить его позже, возможно, с помощью цветной индикации или сообщения рядом с входом. – trincot
Я знаю это, но это не очень понравилось бы здесь. Кроме того, из того, что я могу сказать, другие несимвольные ключи, похоже, ведут себя отлично (после всего этого только «onkeypress» удерживает их от ввода/textarea), а не «onkeydown» и «onkeyup». должны быть введены только очевидные номера, и в случае их копирования/вставки что угодно, он все равно перезапустит текст. Тем не менее, навигация по стрелке является обязательным, а Firefox - достаточно популярным браузером, чтобы беспокоиться о том, чтобы убедиться, что, по крайней мере, это хорошо работает. –
Я нашел исходный код, потому что я искал что-то делать с введенными числами, а не (просто), чтобы не вводить другие символы, которые должен использоваться исходный код (а также для текстовых полей, а не только для ввода) , Однако использование исходного кода было самым простым и ясным способом, чтобы я мог осветить проблему и предложить лучшее решение в этом отношении, так как решение будет таким же. Надеюсь, что это очистит. :) –