jquery - 为什么这个 jQuery 可以在 Chrome 中运行,但不能在 FF 或 IE 中运行?

标签 jquery menu accessibility

var item = $('li > a', $(MENU_ELEMENT));
    item.focus(function(event){
        $(this).siblings('ul').css('display', 'block');
        $(this).parents('ul > li > ul').css('display', 'block');
    });
    item.blur(function(event){ 
        $(this).siblings('ul').css('display', 'none');
        $(this).parents('ul > li > ul').css('display', 'none');
    });

本质上,MENU_ELEMENT 将是一个 ul > li 样式的下拉菜单,具有以下层次结构: <ul><li><a>Menu Item</a><ul><li><a>Sub Item 1</a></li>...</ul></li>....</ul>

一切都非常标准。这个想法是让菜单可以通过 Tab 键访问。在 Chrome 中完美运行:当子元素获得焦点时,它会确保显示父元素以及任何子菜单。当 child 失去注意力时,一切都消失了。

在 FF 中,它的行为就像您刚刚在 CSS 样式表中添加了一个 :focus 选择器一样 - 顶部菜单项工作得很好,但是一旦您进入菜单,它们就会崩溃。

在 IE 中,情况更奇怪 - 你按 Tab 键进入菜单,然后当你再次按 Tab 键时,你会重置到之前的位置。

我确信这并不是真正的 jQuery 问题 - 只是不同浏览器实现焦点、模糊和 Tab 键的方式不同。解决办法是什么?

编辑我应该指出,如果您删除整个模糊处理程序,所有三个浏览器的行为方式完全相同(菜单全部下拉,您可以通过选项卡浏览它们,但它们只是不这样做)当您按 Tab 键退出它们后,不会崩溃。)

最佳答案

某些版本的 Internet Explorer 和 Firefox 不支持子选择器。

一个(更长的)替代方案是使用:

$(this).parents('ul').find('li').find('ul').css('display', 'block');

或者,您可以创建一个函数来解析选择器字符串并将其按 > 分割,然后分别进行查找。

关于jquery - 为什么这个 jQuery 可以在 Chrome 中运行,但不能在 FF 或 IE 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6364806/

相关文章:

ios - 测试 VoiceOver : how can I verify that my UIAccessibilityLayoutChangedNotification notifications are working?

html - 具有半透明背景图像的白色文本的 css 背景颜色

javascript - Bootstrap 3.3.7 hidden-lg-up 不工作

jquery检查img是否有src

javascript - codemirror 动态文本区域实例 css 样式未应用

php - 突出显示菜单父级 - CSS 和 PHP 问题

css - 向 wp_nav_menu 添加一个独特的类

accessibility - 给定元素中屏幕阅读器的替代文本

javascript - 如何在选择下拉菜单项后禁用它

html - 使用 CSS 在菜单悬停时显示子子菜单