Как получить доступ к ключевым кодам специальных символов в браузере Firefox?

#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/KeyboardEvent

2. Я пробовал использовать все эти опции, получая код ключа как неопределенный в 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. Спасибо за краткое объяснение… Я передал «событие» вместо «это» в качестве аргумента. Работает нормально…