#javascript #php #jquery #google-chrome #firefox
#javascript #php #jquery #google-chrome #firefox
Вопрос:
Мы выполняем проверку внешнего интерфейса, проверяя ключевые коды пользовательского ввода. Этот подход успешно работает в Chrome и Internet Explorer, но мы не можем получить доступ к ключевым кодам в браузере Firefox.
function alphanumeric_only(e)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (event) keycode = event.keyCode;
else if (e) keycode = e.which;
else return true;
if(
(keycode >= 48 amp;amp; keycode <= 57) || (keycode >= 65 amp;amp; keycode <= 90) || (keycode >= 97 amp;amp; keycode <= 122) || (keycode == 35) || (keycode == 32) || (keycode == 44) || (keycode == 45) || (keycode == 95))
{
return true;
}
else
{
return false;
}
return true;
}`
Мы вызываем эту функцию из поля ввода следующим образом…..
<div style="float: left;">
<input type="text" id="customname" onkeypress="return alphanumeric_only(this);" value="">
</div>
Комментарии:
1.попробуйте одно из этих:
event.key, event.charCode, event.event.key, event.metaKey
developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent2. Я пробовал использовать все эти опции, получая код ключа как неопределенный в Firefox…..
Ответ №1:
Здравствуйте, вы можете попробовать этот код, он работает во всем браузере 🙂
<p id="demo"></p>
<div style="float: left;">
<input type="text" id="customname" onkeypress="alphanumeric_only(event)" value="">
</div>
<script>
function alphanumeric_only(event)
{
var keycode1 = event.which || event.keyCode;
document.getElementById("demo").innerHTML = "The Unicode value is: " keycode1 ;
if((keycode >= 48 amp;amp; keycode <= 57) || (keycode >= 65 amp;amp; keycode <= 90) || (keycode >= 97 amp;amp; keycode <= 122) || (keycode == 35) || (keycode == 32) || (keycode == 44) || (keycode == 45) || (keycode == 95))
{
return true;
}
else
{
return false;
}
return true;
}
</script>
Ответ №2:
Вы неявно передаете this
в качестве аргумента функции, а не событию
onkeypress="return alphanumeric_only(this);"
что означает e
, что в функции находится элемент, а не событие
function alphanumeric_only(e) {
// "e" is the element. not the event
Это все еще работает в Chrome и IE, потому что эти браузеры поддерживают global window.event
, а Firefox нет.
Решение состоит в том, чтобы также передать событие
onkeypress="return alphanumeric_only(event, this);"
и
function alphanumeric_only(e, element) { ...
или, что еще лучше, удалите встроенный javascript
<input type="text" id="customname" value="">
и используйте надлежащий обработчик событий, который делает это намного проще
document.getElementById('customname').addEventListener('keypress', function(evt) {
var keycode = evt.which || evt.keyCode;
if ((keycode >= 48 amp;amp; keycode <= 57) ||
(keycode >= 65 amp;amp; keycode <= 90) ||
(keycode >= 97 amp;amp; keycode <= 122) ||
(keycode == 35) || (keycode == 32) ||
(keycode == 44) || (keycode == 45) ||
(keycode == 95)) {
e.preventDefault();
}
});
Комментарии:
1. Спасибо за краткое объяснение… Я передал «событие» вместо «это» в качестве аргумента. Работает нормально…