我有一个大型菜单,我正在尝试添加键盘辅助功能。从我的(有限的)理解,这应该工作:
$('nav li').focus(function() { $(this).hover() });
$('nav li').hover(
function() { $(this).addClass('active'); },
function() { $(this).removeClass('active'); }
);
然而,它没有。 hover()
工作正常,但我认为只是将focus()
称为另一个触发器,它可以工作,但事实并非如此。即使我把它写出来:
$('nav li').hover(
function() { $(this).addClass('active'); },
function() { $(this).removeClass('active'); }
);
$('nav li').focus(
function() { $(this).addClass('active'); },
function() { $(this).removeClass('active'); }
);
它仍然不会。我还在学习,所以任何帮助都表示赞赏。此外,还有一种方法可以整合hover
& focus
在一个陈述而不是两个陈述中?
谢谢!
以下是site-in-progress的链接,以便更好地理解。
答案 0 :(得分:2)
li
个元素没有focus
个事件。您可以通过向相关tabindex
元素添加li
属性来让他们接受焦点。这应该可以解决您的问题,因为您的代码看起来不错。
有关工作示例,请参阅此fiddle。
另一种选择是使用click
事件代替focus
,这不需要对li
元素进行任何修改,尽管这是否适合您的需求取决于什么你真的想做。
但是,当您在hover
和focus
事件中运行相同的代码时,为什么还需要focus
个事件?
答案 1 :(得分:0)
试
$('nav li').focus(function() { $(this).trigger('hover') });
而不是
$('nav li').focus(function() { $(this).hover() });
答案 2 :(得分:0)
您网页上的“nav”是什么?如果它是一个类,您可能需要将jquery选择器更改为以下内容:
$('.nav li')
或者也许......
$('li.nav')
...如果CSS类应用于LI元素本身。
答案 3 :(得分:0)
使用委托以获得更好的性能。您可以尝试以下代码,希望它可以帮助您。
$('nav').delegate('li', 'focus mouseover', function() {
$(this).addClass('active');
}).delegate('li', 'blur mouseout', function() {
$(this).removeClass('active');
});