Как я могу обнаружить событие нажатия клавиши вверх / вниз в любом месте элемента? - PullRequest
0 голосов
/ 20 июня 2020

Если я нахожусь в textarea, я могу сделать что-то вроде:

    if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
      e.preventDefault()      return
    }

, которое он обнаруживает в текстовом поле, но я хочу, чтобы он всплывал до некоторого родительского элемента. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Событие всплывает по умолчанию, если вы не используете e.stopPropagation():

document.getElementsByTagName('textarea')[0].addEventListener('keyup', function(e) {
    if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
      e.preventDefault();
      return;
    }
});

document.getElementsByTagName('div')[0].addEventListener('keyup', function(e) {
    console.log('Bubbled');
});
<div>
  <textarea>
  </textarea>
</div>

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

В вашем конкретном случае использования, я думаю, вы хотите сохранить поведение прокрутки стрелок вверх и вниз, но я боюсь, что это невозможно по двум причинам:

Таким образом, вы должны реализовать поведение прокрутки сами (что, на мой взгляд, приведет к странному поведению для большинства пользователей).

1 голос
/ 20 июня 2020

Вы можете просто поместить onKeyPress в родительский элемент div, пока textarea является большим дочерним элементом, а вы не выполняете event.stopPropagation()

<div onkeypress="keyPress(event)">
<textarea>sample text area</textarea>
</div>

<script>
function keyPress(event) {
  alert(event.keyCode);
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...