Проблемы с переключателями и флажками при просмотре веб-страниц Android на Android-телевизоре "Nexus Player" DPad

Nexus Player поставляется с DPad (пульт дистанционного управления Bluetooth). Это направленная панель действует как стандартные кнопки вверх / вниз / влево / вправо на клавиатуре. Благодаря этому вы можете перемещаться в приложении, написанном на HTML (веб-просмотр), как со стандартного ПК / Mac. DPad также имеет кнопку выбора, которая определяется веб-представлением как клавиша ввода. Нажатие клавиши Enter/Select работает со стандартными кнопками и ссылками href, но не работает с флажками и переключателями.

Описание Dpad

Радиокнопки и флажки на ПК изменяют статус только при нажатии клавиши пробела. К сожалению, у DPad нет клавиши пробела. Хитрость, чтобы заставить это работать:

  1. Определить, была ли нажата какая-либо клавиша: onkeydown
  2. Определить, была ли нажата клавиша Enter/Select: if(event.keyCode == 13){}
  3. Эмулируйте щелчок по флажку / переключателю: this.click()
  4. Запретить действие по умолчанию, которое представляет собой отправку формы при нажатии Enter/Select: event.preventDefault()

Это дает нам простой "хак", написанный исключительно на JavaScript, который работает с AngularJS: onkeydown="if (event.keyCode == 13) {this.click(); event.preventDefault()}"

В моем случае элемент checkbox выглядит так:

<input ng-change="MyFunction()"
       ng-model="MyVariables"
       ng-required="!MyVariables"
       name="MyRadioButton"
       id="MyRadioButton"
       value="MyValue"
       type="radio"
       onkeydown="if (event.keyCode == 13) {this.click(); event.preventDefault()}"/> 

Примечание. Можно также изменить состояние флажка или переключателя с помощью this.checked но в моем случае, когда я использую AngularJS, это не сработало (ng-change или ng-click не заметят изменений, сделанных программно для переключателя / переключателя).

Итак, вот мой вопрос. Есть ли более "правильный" способ добиться этого?

0 ответов

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