Manière la plus simple de mettre en tabulation uniquement par le biais des descendants focalisables d'un élément particulier?

Disons que j'ai un document plein de focusable éléments, soit parce qu'ils sont naturellement peut recevoir le focus (comme <input type="text">) ou parce qu'ils ont tabindex="0" ou similaires.

Maintenant, disons qu'il y a une section de mon document que je veux afficher une boîte de dialogue modale, et je ne veux pas que l'utilisateur d'être distrait par quoi que ce soit à l'extérieur de la boîte de dialogue. Je voudrais, pour la touche de tabulation pour cycle uniquement par le biais de focusable éléments à l'intérieur de l'élément conteneur de la boîte de dialogue. Quelle est la façon la plus simple de faire cela?

Si possible, je suis à la recherche d'une solution qui ne se soucie pas de ce que le contenu de la boîte de dialogue ou dans le reste de la page ne sont et ne pas essayer de les modifier. C'est, je ne veux pas faire les éléments à l'extérieur de la boîte de dialogue ne peut recevoir le focus, par exemple. Tout d'abord, cela nécessite de faire un changement réversible et garder une trace de l'état. Deuxièmement, cela nécessite de connaître toutes les manières possibles d'un élément peut être fait peut recevoir le focus. Cela se sent sale, fragile, et infranchissables pour moi.

Ma première tentative ressemble à ça, mais ne fonctionne que dans le sens de la marche (en appuyant sur la touche Tab). Il ne fonctionne pas dans le sens inverse (en appuyant sur Maj+Tab).

<div>Focusable stuff outside the dialog.</div>
<div class="dialog" tabindex="0">
  <!-- Focus should be trapped inside this dialog while it's open -->
  <div class="content">
    Form contents and focusable stuff here.
  </div>
  <div class="last-focus" tabindex="0" onfocus="this.parentNode.focus()"></div>
</div>
<div>More focusable stuff outside the dialog.</div>

Je préfère le voir pur JavaScript solutions. Si il y a un moyen de le faire avec une librairie comme jQuery, je préfère un lien vers le code de la bibliothèque qui fait cela.

source d'informationauteur Chris Calo