Prévenir certains éléments de recevoir le focus

Donc, j'ai la fonction suivante. Ce qu'il fait est à l'écoute pour les événements de focus sur tous les éléments. Si cet élément est soit dans $mobileMenu ou $menuItems il permet, sinon, il enlève le focus:

var $body = $("body");
var $mobileMenu = $("#mobile-menu");
var $menuItems = $("#main-menu a");

$body.on("focus.spf", "*", function(e){
  e.stopPropagation();
  $this = $(this);

  //Prevent items from recieving focus and switching view
  if (!$this.is($mobileMenu) && !$this.is($menuItems)) {
    $this.blur();
  } else {
    console.log(this);
  }
})

Le problème que j'ai, c'est que cela empêche l'utilisateur de se concentrer sur quoi que ce soit si normalement focusable élément qui est maintenant non-focusable précède toute ma liste blanche des éléments qu'il tente de se recentrer sur le même élément, encore et encore.

Personne ne sait comment je peux au lieu de sauter à la prochaine peut recevoir le focus de l'élément?

C'est peut-être le placement de la stopPropogation() déclaration? Je suis un peu confus par ce que vous avez dit juste après le code.
stopPropagation() est bien parce que nous ne voulons pas de bulle et un gaspillage de ressources. Fondamentalement, l'intérieur de l'onglet index est remis sur blur() chaque onglet, il tente de se concentrer sur la première tabbable élément qui devient floue et la prochaine fois que vous onglet, il essaie de le sélectionner à nouveau.
e.preventDefault() pourrait aider ?
N'empêche pas les événements de focus, j'ai peur.
- Je point, cette approche pourrait rendre la page inutilisable pour les personnes qui utilisent des lecteurs d'écran. En essayant de contrôler la mise au point peut interférer avec le focus clavier, décourage les gens d'accéder au reste de la page.

OriginalL'auteur George Reith | 2014-01-07