2016-05-04 19 views
0

Ich versuche, ein barrierefreies Navigationsmenü mit verschachtelten Untermenüpunkte zu machen, das Problem, das ich habe ist, dass während der Navigation durch die Navigation alle inneren Links markiert, es nicht die Dropdown-Anzeige auslöst; Ich bin mir nicht sicher, ob dies von einem Fehler ist, Fokus auszulösen oder nicht, obwohl das ist, was ich vermute.Fokus auf Tastatur Registerkarte

Die html ist in etwa entlang der Linien von:

<ul class="sf-menu"> 
<li> Link </li> 
... 
<li> Link 
    <ul> 
    <li> inner link </li> 
    ... 
    </ul> 
</li> 

Dann meine jQuery ist:

$("ul.sf-menu li").focus(function(){ 
this.toggleClass("over"); 
}); 
$("ul.sf-menu li ul").focus(function(){ 
this.toggleClass("over"); 
}); 

Wo die Klasse over die Anzeige setzt zu blockieren.

EDIT

ich Tab-Indizes auf Listenelemente mit dem Wert 0

Antwort

0

erklärt haben ziemlich sicher, dass dies nicht das, was Tab tun soll, sondern stattdessen jQuery der Verwendung eines hinzufügen Klasse, können Sie den pseado css-Selektor :focus verwenden.

ul.sf-menu li:focus{ /* Code to fold it open */ } 
+0

Zur Verdeutlichung der Tabbing ist für die Zugänglichkeit. –

0

Sie sollten die focusin und focusout Ereignisse verwenden, da die focus und blur Ereignisse nicht Blase zu tun.

$('.item').on({ 
 
    'focusin mouseenter': function() { 
 
    $(this).addClass('open'); 
 
    }, 
 
    'focusout mouseleave': function() { 
 
    $(this).removeClass('open'); 
 
    } 
 
});
.item > ul { 
 
    position: fixed; 
 
    right: 100%; 
 
} 
 

 
.item.open > ul { 
 
    position: static; 
 
    right: auto; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li class="item"> 
 
    <a href="#">1</a> 
 
    <ul> 
 
     <li> 
 
     <a href="#">1.1</a> 
 
     </li> 
 
     <li> 
 
     <a href="#">1.2</a> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
    <li class="item"> 
 
    <a href="#">2</a> 
 
    <ul> 
 
     <li> 
 
     <a href="#">2.1</a> 
 
     </li> 
 
     <li> 
 
     <a href="#">2.2</a> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>


Zusätzlich Elemente mit display: none Fokus nicht empfangen kann, so dass Ihr Code:

$("ul.sf-menu li ul").focus(...) 

kann nie ausführen, auch wenn Sie das focusin Ereignis verwenden aktualisieren.

+0

Sie haben Recht, und haben die genaue Funktionalität erstellt, die ich hoffe, aber es funktioniert immer noch nicht. Es scheint, anstatt die Listenelemente zu fokussieren, sondern die Anker-Tags zu fokussieren. –

+0

@NathanGilford, was ist der Punkt der Fokussierung der Listenelemente überhaupt? Sie sind nicht umsetzbar. Diese implizit öffnenden Menüs sind auch keine gute Wahl für Touchscreens. Sie können nur die Schaltflächen zum Öffnen/Schließen von Untermenüs verwenden. – zzzzBov

+0

Ich verstehe, dass ich, wenn ich von Anfang an in diese Site involviert gewesen wäre, die Barrierefreiheit zu diesem Zeitpunkt behandelt hätte, bin ich gerade einer schlecht gemachte Seite zugeteilt worden. Die Listenelemente lösen die vorhandenen Hover-Effekte aus. Ich muss lediglich Fokuseffekte erstellen, die dasselbe tun. –

Verwandte Themen