Удалить элементы из потока пространственной навигации Opera? - PullRequest
1 голос
/ 26 марта 2012

Сегодня я немного застрял с ошибкой в ​​моем веб-приложении в последней версии Opera.

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

tabindex="-1"

Это означает, что когда кто-то заходит на страницу и начинает нажимать клавишу «Tab», он будет проходить по якорям / входам в документе, но элементы с назначенным -1 будут игнорироваться.

Однако поток пространственной навигации Opera по-прежнему позволяет пользователям получать доступ к этим элементам через клавиатуру.

Кто-нибудь знает альтернативный способ удаления элементов из потока пространственной навигации Opera таким же образом, как элементыМожно ли в других браузерах использовать обход документов с помощью клавиши табуляции?

В частности: удаление якорей из доступа через Opera, а не через вводы.

Приведенная ниже разметка дает элементарный пример.В браузерах, отличных от Opera, вы можете использовать клавишу табуляции для просмотра списка, но он пропускает ссылки 3, 4 и 7, потому что для них установлено tabindex = -1.В Opera, использующей пространственную навигацию (Ctrl + стрелка вниз / вверх), он все равно будет фокусироваться на этих ссылках.

<html>
    <head>
        <style>
            :focus{border: 1px dashed green}
        </style>
    </head>

    <body>
        <ul>
            <li><a href="#">Link 1</a></li>
            <li><a href="#">Link 2</a></li>
            <li><a href="#" tabindex="-1">Link 3 (tabindex -1)</a></li>
            <li><a href="#" tabindex="-1">Link 4 (tabindex -1)</a></li>
            <li><a href="#">Link 5</a></li>
            <li><a href="#">Link 6</a></li>
            <li><a href="#" tabindex="-1">Link 7 (tabindex -1)</a></li>
            <li><a href="#">Link 8</a></li>
            <li><a href="#">Link 9</a></li>
        </ul>
    </body>
</html>

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Я не могу найти хороший способ сделать это. Можно сделать некрасивый хак, как <a onfocus="document.moveFocusDown()" tabindex="-1">, но я бы не рекомендовал его, потому что нет хорошего способа выяснить, хочет ли пользователь идти вверх или вниз ... ну, вы можете прослушать keyup и сделать это из там, если элемент tabindex = -1 находится в фокусе, а клавиша - стрелка вверх / вниз, я думаю ..

Я рекомендую вам сообщить об ошибке, говорящей о том, что spatnav должен уважать tabindex = "- 1" - IMO, ваш код как есть, в порядке, и имеет смысл изменить это на стороне Opera. Я рад сообщить об ошибке в общем направлении нужным разработчикам, как только вы сообщите об этом. (Я работаю над тестированием и тестированием в Opera).

1 голос
/ 26 июля 2012

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

http://jsfiddle.net/majornista/5pbFz/46/

1 голос
/ 26 марта 2012

Как вы, наверное, знаете, Opera имеет другой тип навигации по клавиатуре , чем в большинстве браузеров. Это на самом деле делает навигацию с помощью клавиатуры невероятно простой.

Теперь вернемся к вашему вопросу ... у меня это работает в Opera 10.61 1250 (Windows 7). Ниже приведен пример страницы:

<html>
<head>
</head>
<body>
<input type="textbox">
<input type="textbox" style="display:none">
<input type="textbox" tabindex="-1">
<input type="textbox">
</body>
</html>

2-й и 3-й входы пропускаются, когда я нажимаю клавишу Tab.

Если это отличается от того, что у вас есть, пожалуйста, опубликуйте пример кода.

...