Принудительная остановка табуляции на скрытом элементе?Возможный? - PullRequest
4 голосов
/ 21 августа 2010

Сайт находится здесь

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

Я пытался навязать им табиндекс, но без сигары.

Я придумал просто поставить бессмысленный флажок прямо перед метками и установить его на ширину: 1px;и высотой 1px;который, кажется, действительно работает только в chrome & safari.

Так есть ли у вас какие-либо другие идеи принудительно использовать табуляцию в этих местах без отображения элемента?* Просто если кто-то другой воспользуется этим, я смог вставить маленькие чекбоксы в chrome & safari с помощью JQuery:

if ($.browser.safari) {
    $("label[for='Unlimited']").parent().after('<input style="height:1px; width:1px;" type="checkbox">');
    $("label[for='cash']").parent().after('<input style="height:1px; width:1px;" type="checkbox">');
    $("label[for='Length12']").parent().after('<input style="height:1px; width:1px;" type="checkbox">');
}

Примечание: $ .browser.webkit не сбылосьЯ должен был использовать сафари

Ответы [ 6 ]

3 голосов
/ 21 августа 2010

Не вводите радиовход, но установите tabindex="0" для элемента <label> радиовхода досягаемости.

(Индекс табуляции 0 сохраняет элемент в потоке табуляции с другими элементами с неопределенной вкладкойиндекс, который все еще может быть табулирован.)

2 голосов
/ 18 июля 2018

рабочим решением в моем случае для включения выбора вкладок / навигации со стрелками было установить непрозрачность на ноль, а не на «отображение: нет»

.styled-selection input {
    opacity: 0;         // hide it visually
    z-index: -1;        // avoid unintended clicks
    position: absolute; // don't affect other elements positioning
}
2 голосов
/ 22 августа 2010

Если вы отделяете метку от какого-либо поля и устанавливаете tabIndex, вы можете использовать для нее табуляцию и захватывать события мыши и клавиш.Кажется более разумным использовать кнопки или входы с type = "button", но вам подойдет.

<form>
    <fieldset>
        <input value="today">
        <label tabIndex="0" onfocus="alert('label');">Label 1</label>
    </fieldset>
</form>
0 голосов
/ 20 сентября 2017

У меня есть альтернативный ответ, который, я думаю, еще не был упомянут. Недавно я читал Документы разработчика Mozilla Документы MDN, формы , в особенности раздел «Доступность» Документы MDN, доступный HTML (5) , для получения информации о доступности клавиатуры и форме. структура.

Одним из конкретных упоминаний в разделе «Специальные возможности» является использование элементов HTML5, когда и где это возможно, - они часто имеют кросс-браузерную и более доступную поддержку по умолчанию (не всегда верно, но ясная структура содержимого и правильные элементы также помогают экрану чтение вместе с доступностью клавиатуры).

В любом случае , вот JSFiddle: JSFiddle :: Keyboard Accessible Forms

По сути, я сделал следующее:

  1. беспардонно копирует часть исходного кода из исходного кода Mozilla в JSFiddle (источник в комментариях скрипки)
  2. создайте TEXT-тип и присвойте ему атрибут HTML5 " readonly "
  3. добавить атрибут tabindex = "0" в readonly
  4. Измените «readonly» CSS для этого элемента ввода, чтобы он выглядел «пустым» или скрытым *

HTML

<title>Native keyboard accessibility</title>
<body>

  <h1>Native keyboard accessibility</h1>

  <hr>

  <h2>Links</h2>

  <p>This is a link to <a href="https://www.mozilla.org">Mozilla</a>.</p>

  <p>Another link, to the <a href="https://developer.mozilla.org">Mozilla Developer Network</a>.</p>

  <h2>Buttons</h2>

  <p>
    <button data-message="This is from the first button">Click me!</button>
    <button data-message="This is from the second button">Click me too!
    </button>
    <button data-message="This is from the third button">And me!</button>
  </p>

  <!-- "Invisible" HTML(5) element -->
  <!-- * a READONLY text-input with modified CSS... -->
  <hr>
  <label for="hidden-anchor">Hidden Anchor Point</label>
  <input type="text" class="hidden-anchor" id="hidden-anchor" tabindex="0" readonly />
  <hr>

  <h2>Form</h2>

  <form name="personal-info">
    <fieldset>
      <legend>Personal Info</legend>
      <div>
        <label for="name">Fill in your name:</label>
        <input type="text" id="name" name="name">
      </div>
      <div>
        <label for="age">Enter your age:</label>
        <input type="text" id="age" name="age">
      </div>
      <div>
        <label for="mood">Choose your mood:</label>
        <select id="mood" name="mood">
          <option>Happy</option>
          <option>Sad</option>
          <option>Angry</option>
          <option>Worried</option>
        </select>
      </div>
    </fieldset>
  </form>


  <script>
    var buttons = document.querySelectorAll('button');

    for(var i = 0; i < buttons.length; i++) {
      addHandler(buttons[i]);
    }

    function addHandler(button) {
      button.addEventListener('click', function(e) {
        var message = e.target.getAttribute('data-message');
        alert(message);
      })
    }
  </script>

</body>

CSS Styling

input {
  margin-bottom: 10px;
}

button {
  margin-right: 10px;
}

a:hover, input:hover, button:hover, select:hover,
a:focus, input:focus, button:focus, select:focus {
  font-weight: bold;
}


.hidden-anchor {
  border: none; 
  background: transparent!important;
}
.hidden-anchor:focus {
  border: 1px solid #f6b73c;
}

Кстати, вы можете отредактировать правило CSS для .hidden-anchor: focus , чтобы убрать выделение для скрытого якоря, если хотите. Я добавил его только для того, чтобы «доказать» эту концепцию, но она все еще работает невидимо, как и было запрошено.

Надеюсь, это поможет!

0 голосов
/ 08 февраля 2016

Еще одним отличным вариантом будет вложить ваши input + div в label и скрыть ввод, установив width и height в 0px вместо дисплей: нет

Этот метод позволяет даже использовать псевдоклассы, такие как: focus или: проверено с помощью input: pseudo + styleDiv

<label>
    <input type="radio">
    <div class="styleDiv">Display text</div>
</label>

input
{
    width: 0px;
    height: 0px;
}

input + .styleDiv
{
    //Radiobutton style here
    display: inline-block
}

input:checked + .styleDiv
{
   //Checked style here
}
0 голосов
/ 21 августа 2010

Сбросьте радио-кнопки и вместо них; сохраните некоторые скрытые поля в своем коде, в которых вы сохраните выбранное значение ваших компонентов пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...