Обнаружение клавиши ввода на элементе svg

Я пытаюсь сделать свой веб-сайт более доступным, сделав навигацию только с помощью ввода с клавиатуры. Для этого мне нужно иметь возможность перейти к динамически созданному элементу SVG, g, а затем нажать Enter, чтобы открыть модальное окно с дополнительной информацией.

Я могу определить, когда нажата любая клавиша, но конкретно не вводить. Я видел много людей, описывающих, как обнаружить нажатие клавиши ввода на элементе ввода, но это не решает мою проблему. Проблема, с которой я столкнулся, заключается в том, что myEvent - это обычное событие, а не событие клавиатуры. Так что у него нет кода ключа. Я также видел, что предлагается использовать myEvent.key или myEvent.what, которых у него также нет. Поэтому я не знаю, как получить информацию о том, какая клавиша была нажата.

Я не знаю, полезна ли эта информация, но мой веб-сайт представляет собой веб-приложение для просмотра дерева семейной истории, поэтому каждый элемент SVG является визуальным представлением узла в дереве. Я пытаюсь перейти к каждому узлу и отобразить дополнительную информацию о человеке сфокусированного узла при нажатии клавиши ввода.

 var g:Element = document.createElementNS("http://www.w3.org/2000/svg", "g");

 g.setAttribute('tabindex', "0"); // So I can tab to the element

 g.addEventListener("keypress",  function (myEvent) {
      // To this point everything works.

      // The next line gives an error.
      if (myEvent.keyCode === 13) { // 13 is enter
           // Open my modal
      }
 });

Какую ошибку возвращает? Потому что я не вижу ничего плохого в этом коде.

John Krakov 30.05.2019 22:43

он возвращает пустоту

jaredacook 30.05.2019 22:50

1) Какой браузер вы используете для тестирования? 2) Пробовали ли вы вместо этого использовать keydown или keyup? (keypress обесценивается - developer.mozilla.org/en-US/docs/Web/API/Document/…) 3) Пробовали ли вы вместо этого использовать myEvent.key? (keycode амортизируется - developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCo‌​de)

Vlad274 30.05.2019 22:52

да, я пробовал keydown с myEvent.key, но все равно получаю сообщение об ошибке «Свойство 'key' не существует для типа 'Event'.ts(2339)"

jaredacook 30.05.2019 22:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
643
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте сделать слепок.

var container:Element = document.createElement("div");
var svg:Element = document.createElementNS("http://www.w3.org/2000/svg", "svg");

 var g:Element = document.createElementNS("http://www.w3.org/2000/svg", "g");

 g.setAttribute('tabindex', "0"); // So I can tab to the element

 g.addEventListener("keypress",  function (myEvent:KeyboardEvent) {
      // To this point everything works.
      
     console.info(myEvent);
      // The next line gives an error.
      if (myEvent.keyCode === 13) { // 13 is enter
          alert('enter');
      }
 });

var circle:Element = document.createElementNS("http://www.w3.org/2000/svg", "circle");
circle.setAttribute("cx", "20");
circle.setAttribute("cy", "20");
circle.setAttribute("r", "15");

g.appendChild(circle);
svg.appendChild(g);
container.appendChild(svg);
document.body.appendChild(container);

Другие вопросы по теме