J'ai donc la fonction suivante. Ce qu'il fait, c'est écouter l'événement focus sur tous les éléments. Si cet élément est soit dans $mobileMenu
ou $menuItems
il le permet sinon il supprime 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 est que cela empêche l'utilisateur de se concentrer sur quoi que ce soit si un élément normalement focalisable qui n'est plus focalisable précède l'un de mes éléments sur liste blanche car il tente simplement de se recentrer sur le même élément encore et encore.
Est-ce que quelqu'un sait comment je peux lui dire de passer au prochain élément focalisable?
Cela fonctionne (mis à jour):
$body.on("focus.spt", "*", function(e){
$this = $(this);
if (!$this.is($mobileMenu) && !$this.is($menuItems)) {
$this.blur();
var next=$this.nextAll().find('a,input');
if (next.length>0) next[0].focus();
} else {
console.log('ok',this);
e.stopPropagation();
}
})
(mise à jour) violon -> http://jsfiddle.net/CADjc/ Vous pouvez voir dans la console quels éléments reçoit le focus (main-menu a
et mobile-menu
)
Testé sur:
<input type="text" tabindex="1" value="test">
<span><input type="text" tabindex="2" value="test"></span>
<div><input type="text" id="mobile-menu" tabindex="3" value="mobile-menu"></div>
<div><span>
<div id="main-menu">
<a tabindex="4">main-menu</a>
<a tabindex="5">main-menu</a>
</div>
</span></div>
<span>
<input type="text" tabindex="6" value="test">
</span>
Si vous définissez le tabindex sur "-1" sur l'élément, il ignorera l'onglet. Je ne sais pas si cela fonctionne dans tous les navigateurs, mais cela fonctionne dans Google Chrome.
<input type="text" tabindex="-1"/>
attr ("en lecture seule", "en lecture seule"), empêche le focus d'entrée et la valeur SONT envoyés au serveur.
Si vous désactivez quelque chose, il ne recevra pas le focus. Par exemple:
<input type="text" disabled="disabled" />
Ajoutez-le par programme, vous pouvez faire:
var el = document.getElementById('disableme');
el.setAttribute('disabled', 'disabled');