90 votes

Pouvez-vous passer en revue tous les boutons radio ?

J'ai une liste de boutons radio. Lorsque je les passe en revue, il semble que seul le premier bouton radio ou celui qui est sélectionné soit mis en évidence, le reste des boutons radio étant ignoré. Les cases à cocher n'ont pas ce problème.

http://jsfiddle.net/2Bd32/

J'ai du mal à expliquer à mon AQ que ce n'est pas un bug. Quelqu'un peut-il m'expliquer pourquoi cela se produit ?

Soccer: <input type="checkbox" name="sports" value="soccer"  tabindex="1" /><br />
Football: <input type="checkbox" name="sports" value="football"  tabindex="2" /><br /> 

<input type="radio" name="num" value="3" tabindex="3">3<br>
<input type="radio" name="num" value="4" tabindex="4">4<br>
<input type="radio" name="num" value="5" tabindex="5">5<br>
<input type="radio" name="num" value="6" tabindex="6">6<br>
<input type="radio" name="num" value="7" tabindex="7">7<br>

Baseball: <input type="checkbox" name="sports" value="baseball"  tabindex="8"  /><br /> 
Basketball: <input type="checkbox" name="sports" value="basketball"  tabindex="9"  />

142voto

j08691 Points 86464

Vous pouvez citer le W3C comme source, aquí y aquí .

Essentiellement, un bouton radio est un groupe qui fonctionne comme un élément unique puisqu'il ne conserve qu'une seule valeur. En cliquant sur un groupe de boutons radio, vous accédez au premier élément, puis vous pouvez naviguer dans le groupe à l'aide des touches fléchées.

  • La mise au point peut passer à un groupe de radio via :
    • T
    • Une clé d'accès ou un moyen mnémotechnique ciblant l'étiquette
    • Activation du label (par Assis
  • La touche Tab déplace le focus entre les boutons radio et d'autres widgets.
  • W lorsqu'aucun bouton radio n'est sélectionné :
    • T sur la première case d'option du groupe, mais ne la sélectionne pas. bouton.
    • L'appui sur la touche Shift+Tab déplace le focus sur la dernière radio du groupe, mais ne sélectionne pas le bouton radio.
  • Lorsque le focus est placé sur le groupe dans lequel se trouve une case d'option sélectionnée, l'appui sur les touches Tab et Shift+Tab déplace le focus sur la case radio qui est cochée.
  • U le focus et la sélection.
    • U la sélection dans les cases d'option du groupe. Si la première bouton radio a le focus, le focus et la sélection se déplacent vers le dernier bouton radio du groupe. dernière case d'option du groupe.
    • L'appui sur la flèche vers le bas déplace le focus et la sélection en arrière dans les boutons radio du groupe. Si la dernière case d'option a le focus, alors le focus et la sélection se déplacent vers la premier bouton radio du groupe. * Une pression sur la barre d'espacement vérifie la bouton radio qui a actuellement le focus.
  • Quand Lorsque vous revenez dans le groupe, la mise au point revient au point précédent (l'élément avec la sélection définie). (l'élément avec la sélection définie).
  • En appuyant sur la touche Tab, on quitte le groupe et déplace le focus sur le contrôle de formulaire suivant.
  • P sur les touches Shift+Tab pour quitter le groupe et déplacer le focus sur le contrôle de formulaire précédent. précédent.

18voto

antejan Points 2534

Boutons radio avec un nom est comme un contrôle unique (comme input ou select), vous pouvez changer sa valeur avec les touches fléchées, la touche tabulation déplace le focus vers un autre contrôle.

6voto

Mike Dinder Points 41

Je ne suis pas sûr que ce soit encore un problème pour tout le monde, mais j'ai trouvé une solution. Comme indiqué ci-dessus, il ne s'agit pas d'un bug, mais d'un comportement par défaut. Nous devons simplement penser à la façon dont nous interagissons avec un site Web différemment. Lorsque vous utilisez la tabulation pour accéder à un groupe d'objets radio, vous devez ensuite utiliser les touches fléchées pour naviguer dans cet ensemble d'entrées, puis la tabulation ou shift+tab pour sortir de cet ensemble d'entrées.

https://www.w3.org/TR/wai-aria-practices/examples/radio/radio-1/radio-1.html

0voto

vusan Points 1789

Si vous utilisez angularjs, vous pouvez contrôler le bouton radio directement avec ng-model en utilisant le même ng-model et la suppression name .

<input type="radio" value="0" ng-model="status">
<input type="radio" value="1" ng-model="status">

Un autre avantage, à côté de la touche de tabulation, est que vous pouvez vous concentrer sur le bouton radio sans le sélectionner. Vous pouvez ensuite sélectionner en appuyant sur space .

-2voto

Simon Phillips Points 1

Je n'ai trouvé de réponses nulle part, seulement des parties de la solution ou du puzzle, alors j'ai décidé de trouver la solution et de prouver que c'était possible. Lorsque vous exécutez le snippet ci-dessous, ne sélectionnez pas de bouton radio mais cliquez plutôt à proximité, puis appuyez sur la touche de tabulation, et vous verrez qu'il sélectionne le premier. Ensuite, il sélectionnera le deuxième, le troisième, etc.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    <div id="buttonArea" style="width:100%;height:100%;">
        <label>Audi E-Tron</label><input type='radio' id='car1' name='car' value='Audi E-Tron'>
        <label>Bolt EV</label><input type='radio' id='car2' name='car' value='Bolt EV'>
        <label>Leaf EV</label><input type='radio' id='car3' name='car' value='Leaf EV'>
        <label>Tesla Model 3</label><input type='radio' id='car4' name='car' value='Tesla Model 3'>
    </div>
</body>
</html>

<script>
$(document).keydown(function(event) {

var car1 = document.getElementById("car1");
var car2 = document.getElementById("car2");
var car3 = document.getElementById("car3");
var car4 = document.getElementById("car4");

// 9 represents the tab keycode of the document keydown event. 

event.preventDefault(); // this prevents the tab from doing its default action.

    if(event.keyCode == 9 && car1.checked == false && car2.checked == false && car3.checked == false && car4.checked == false) {         
        car1.checked = true; // This checks the radio option.
    }
    else if (event.keyCode == 9 && car1.checked == true) { 
        car2.checked = true;
    }
    else if (event.keyCode == 9 && car2.checked == true) { 
        car3.checked = true;
    }
    else if (event.keyCode == 9 && car3.checked == true) { 
        car4.checked = true;
    }
    else if (event.keyCode == 9 && car4.checked == true) { 
        car1.checked = true;
    }

    car1.blur();    car2.blur();    car3.blur();    car4.blur();
})
</script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X