Für die Erreichbarkeit ich muss erweiterte Fokusfunktion auf meiner Navigation haben. Wenn der Fokus auf das Sub-Navi gerichtet ist, wird, wenn die Abwärts- oder Hoch-Taste gedrückt wird, die JQuery durch die Elemente in dem Sub-Nav durchgehen, während der Fokus beibehalten wird. Ich habe das fast schon genagelt, aber die jquery next() funktioniert nicht wie erwartet, stattdessen überspringt sie zwei oder geht manchmal in zufälliger Reihenfolge.JS/JQuery Keydown-Zyklus durch Sub-Nav (Fokus-Funktion) funktioniert nicht wie erwartet
HTML: -
<nav class="nav nav--primary" role="navigation">
<a href="/" title="Home" class="primary-nav-link parent active" data-position="1" tabindex="1">wasd</a>
<div class="nav__dropdown">
<a class="primary-nav-link parent " tabindex="1">wasd</a>
<span class="nav__expand"></span>
<div class="nav__dropdown__content" aria-hidden="true">
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.1">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.2">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.3">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.4">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.5">wasd</a>
</div>
</div>
<div class="nav__dropdown">
<a class="primary-nav-link parent " tabindex="1">wasd</a>
<span class="nav__expand"></span>
<div class="nav__dropdown__content" aria-hidden="true">
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.1">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.2">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.3">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.4">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.5">wasd</a>
</div>
</div>
<div class="nav__dropdown">
<a class="primary-nav-link parent " tabindex="1">wasd</a>
<span class="nav__expand"></span>
<div class="nav__dropdown__content" aria-hidden="true">
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.1">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.2">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.3">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.4">wasd</a>
<a href="#" class="sub-nav-link" tabindex="-1" data-position="3.5">wasd</a>
</div>
</div>
</nav>
JS: -
$(".parent").focus(function(){
$(this).closest(".nav__dropdown").addClass("hover");
$('.hover .nav__dropdown__content a').first().addClass('navSelected');
$(document).keydown(function(e) {
var selected = $('.navSelected');
var sub = $('.hover .nav__dropdown__content a');
if(e.which === 40){
if(selected){
selected.removeClass('navSelected');
next = selected.next();
if(next.length > 0){
selected = next.addClass('navSelected');
}else{
selected = sub.eq(0).addClass('navSelected');
}
}else{
selected = sub.eq(0).addClass('navSelected');
}
}else if(e.which === 38){
if(selected){
selected.removeClass('navSelected');
next = selected.prev();
if(next.length > 0){
selected = next.addClass('navSelected');
}else{
selected = sub.last().addClass('navSelected');
}
}else{
selected = sub.last().addClass('navSelected');
}
}
});
}).blur(function(){
$(".nav__dropdown").removeClass("hover");
$(document).removeClass("navSelected");
})
arbeiten js Geige: -
https://jsfiddle.net/zpnfzevb/
Ich kann nicht scheinen, um dieses Problem in der jsfiddle zu reproduzieren. –
Klicken Sie oben rechts auf den ersten Navigationslink und dann zweimal auf den Tab, um den Fokus auf das richtige Element zu richten. Sie sehen dann das Subnav mit dem grünen Element und drücken dann die Nach-oben- und Nach-unten-Taste fahre nicht in der richtigen Reihenfolge. –
Es ist keine zufällige Reihenfolge. Jedes Menü hat ein Muster: A: 1,3,5,2,4; B: 5,4,3,2,1; C: 1,3,5,2,4. Ich würde deine Mathematik überprüfen. Ich würde auch jeden 'tabindex' ablegen, da du doppelte Werte hast, und du brichst Tabs zusammen (da das Menü' role = menu' nicht hat, kann ein Benutzer nicht erwarten, dass die Pfeile funktionieren). Kurz gesagt, überdenken Sie, was "Für Zugänglichkeit" bedeutet, da Sie der Meinung waren, dass Sie schlechte technische Anforderungen hatten. – aardrian