Проблемы с переключателями и флажками при просмотре веб-страниц Android на Android-телевизоре "Nexus Player" DPad
Nexus Player поставляется с DPad (пульт дистанционного управления Bluetooth). Это направленная панель действует как стандартные кнопки вверх / вниз / влево / вправо на клавиатуре. Благодаря этому вы можете перемещаться в приложении, написанном на HTML (веб-просмотр), как со стандартного ПК / Mac. DPad также имеет кнопку выбора, которая определяется веб-представлением как клавиша ввода. Нажатие клавиши Enter/Select работает со стандартными кнопками и ссылками href, но не работает с флажками и переключателями.
Радиокнопки и флажки на ПК изменяют статус только при нажатии клавиши пробела. К сожалению, у DPad нет клавиши пробела. Хитрость, чтобы заставить это работать:
- Определить, была ли нажата какая-либо клавиша:
onkeydown
- Определить, была ли нажата клавиша Enter/Select:
if(event.keyCode == 13){}
- Эмулируйте щелчок по флажку / переключателю:
this.click()
- Запретить действие по умолчанию, которое представляет собой отправку формы при нажатии 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 не заметят изменений, сделанных программно для переключателя / переключателя).
Итак, вот мой вопрос. Есть ли более "правильный" способ добиться этого?