Ich bin auf der Suche nach der Logik, um eine Dropdown-Menü-Tastatur zugänglich zu machen.jQuery herauszufinden, ob das Elternteil "Fokus" verloren hat
Die HTML wird als solche (extra Klassennamen für Klarheit verwendet) strukturiert:
<ul>
<li class="primaryMenuItem">
<a href="">Link 1</a>
<ul class="popUpMenu">
<li><a href="">Sub Link 1</a></li>
<li><a href="">Sub Link 2</a></li>
</ul>
</li>
<li class="primaryMenuItem">
<a href="">Link 2</a>
<ul class="popUpMenu">
<li><a href="">Sub Link 1</a></li>
<li><a href="">Sub Link 2</a></li>
</ul>
</li>
</ul>
Verbindung 1 und Link 2, wenn schwebte, wird das Untermenü Listen zeigen (Pull-Down-Menü). Ich habe das funktioniert gut mit einigen jQuery und dem jQuery HoverIntent-Plugin.
Der Haken ist, dass dies zur Zeit nur mit der Maus funktioniert.
Die nächste Herausforderung besteht darin, dies über die Tastatur zu erledigen.
Ich kann leicht ein Fokus-Ereignis auf die Top-Level-Links hinzufügen, die dann die sekundären Menüs auslösen:
$('ul.primaryMenuItem a:first').focus([call showMenu function])
Das funktioniert gut.
Um das Menü zu schließen, müssen Sie beim Öffnen eines anderen Menüs prüfen, ob bereits ein anderes geöffnet ist, und falls ja, schließen Sie es.
Das funktioniert auch gut.
Wo das jedoch fehlschlägt, ist, wenn Sie das letzte Menü geöffnet haben, und Tab daraus. Da Sie nicht in ein anderes Menü getippt haben, bleibt dieses geöffnet.
Die Herausforderung besteht darin herauszufinden, wie/wann das Menü zu schließen ist und welche Logik (jQuery) benötigt wird, um es herauszufinden. Im Idealfall würde ich das Menü schließen, wenn der Fokus auf einem Element auf der Seite ANDERER als die untergeordneten Elemente des Menüs liegt.
Logisch, ich bin für diese Suche:
$('li.primaryMenuItem').blur([close $(this).find('ul.popUpMenu'))
Allerdings können Sie das nicht tun, da die LI eigentlich nicht im Fokus hat, sondern den Anker-Tag in sie.
Irgendwelche Vorschläge?
UPDATE:
vielleicht ein besserer/einfacherer Weg, um die Frage zu stellen:
Via jQuery, ist es eine Möglichkeit, zu ‚Uhr‘, um zu sehen, wenn der Fokus außerhalb aller Kinder eines bestimmten Objekts bewegt hat ?
Gibt es ein Tippfehler? '$ ('ul.primaryMenuItem a: first'). focus ([Aufruf showMenu Funktion])' -> '$ ('li.primaryMenuItem a: first'). focus ...' – superjos