Tôi đang mắc kẹt khi tìm ra logic để làm cho bàn phím menu thả xuống có thể truy cập được.jQuery tìm ra nếu cha mẹ mất 'tập trung'
HTML được cấu trúc như vậy (tên thêm lớp được sử dụng cho rõ ràng):
<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>
Link 1 và Link 2, khi được quét, sẽ hiển thị danh sách sub-menu (trình đơn thả xuống). Tôi có điều này làm việc tốt với một số jQuery và jQuery hoverIntent plugin.
Điều bắt được là thao tác này chỉ hoạt động với chuột tại thời điểm này.
Thách thức tiếp theo là thực hiện thao tác này thông qua bàn phím.
tôi có thể dễ dàng thêm một sự kiện tập trung vào các liên kết cấp cao nhất mà sau đó kích hoạt các menu thứ cấp:
$('ul.primaryMenuItem a:first').focus([call showMenu function])
đó làm việc tốt.
Để đóng menu, một tùy chọn là, khi mở một menu khác, hãy kiểm tra xem liệu có một tùy chọn khác đã mở hay không và nếu có, hãy đóng nó.
Điều đó cũng hoạt động tốt.
Trường hợp không thành công, tuy nhiên, nếu bạn có menu cuối cùng mở và thoát ra khỏi nó. Vì bạn chưa đặt tab vào một menu khác, trình đơn này vẫn mở.
Thách thức là tìm ra cách/thời điểm đóng menu và logic cần thiết (jQuery) để tìm ra. Lý tưởng nhất, tôi sẽ đóng menu khi tiêu điểm nằm trên một phần tử trên trang KHÁC so với bất kỳ phần tử con nào của trình đơn.
Một cách logic, tôi đang tìm kiếm này:
$('li.primaryMenuItem').blur([close $(this).find('ul.popUpMenu'))
Tuy nhiên, bạn không thể làm điều đó, kể từ khi LI không thực sự có trọng tâm, nhưng thay vì thẻ neo bên trong nó.
Mọi đề xuất?
UPDATE:
có lẽ là một/cách tốt hơn đơn giản để đặt câu hỏi:
Via jQuery, là có một cách để 'canh' để xem nếu tập trung đã chuyển bên ngoài của tất cả các trẻ em của một đối tượng cụ thể ?
Có một lỗi đánh máy? '$ ('ul.primaryMenuItem a: first'). focus ([call showMenu function])' -> '$ ('li.primaryMenuItem a: first'). focus ...' – superjos