Отключение пробела в качестве первого символа в поле ввода не работает в Chrome Android/приложении

#javascript

Вопрос:

У меня есть этот код, который в основном отключает добавление в пустое пространство внутри поля ввода, однако, похоже, он не работает в Chrome Mobile/App/Android.

У кого-нибудь есть какие-нибудь решения?

 <script>
document.getElementById('firstname').addEventListener('keydown', function(evt){
  if (this.value.length === 0 amp;amp; evt.which === 32) evt.preventDefault();
});
</script>
 

Комментарии:

1. developer.mozilla.org/en-US/docs/Web/API/UIEvent/which (нестандартные, не используются в производстве и т. Д.)

Ответ №1:

Вы можете использовать KeyboardEvent.code вместо этого

 document.getElementById('firstname').addEventListener('keydown', function(evt){
  if (this.value.length === 0 amp;amp; evt.code === 'Space') 
    evt.preventDefault();
}); 
 <input id="firstname"> 

Комментарии:

1. Как и мой код, я не могу заставить его работать на Chrome Android. Он отлично работает на настольных компьютерах и в Safari, но не на мобильных устройствах.

2. вы пытались отладить скрипт с помощью предупреждения? срабатывает ли прослушиватель «клавиша вниз» при нажатии клавиши пробела? Я попробовал это в safari на iPhone, и это работает.

3. Он работает в Safari, на рабочем столе Chrome и в Firefox. Но на мобильном устройстве Chrome он, похоже, не работает. Я перепробовал все виды версий, и я думаю, что это может быть просто мобильная версия Chrome в настоящее время.

4. Chrome на iPhone также работает… срабатывает ли событие keydown в вашем Chrome?

Ответ №2:

Согласно https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent, KeyboardEvent.which является устаревшим. Используйте KeyboardEvent.key вместо этого.

Также смотрите список кодов ключей.

 document.getElementById('firstname').addEventListener('keydown', function(evt){
  if (this.value.length === 0 amp;amp; evt.key === " ") evt.preventDefault();
}); 
 <input id="firstname"> 

Комментарии:

1. Это прекрасно работает. Но в Chrome Mobile/Android это не работает, пользователь по какой-то причине может добавлять пустые места в поле ввода. На рабочем столе это работает нормально, в Safari это работает нормально.