Firefox css没有';不要对javascript模糊做出反应
我通过让用户聚焦那些菜单的“标签”来切换导航子菜单。与此类似(简化代码): 现在,这在所有浏览器中都可以正常工作:标签是一个锚,因此接受焦点;点击它,菜单显示。要隐藏,请单击其他位置=模糊标签。Firefox css没有';不要对javascript模糊做出反应,javascript,css,firefox,onblur,Javascript,Css,Firefox,Onblur,我通过让用户聚焦那些菜单的“标签”来切换导航子菜单。与此类似(简化代码): 现在,这在所有浏览器中都可以正常工作:标签是一个锚,因此接受焦点;点击它,菜单显示。要隐藏,请单击其他位置=模糊标签。 但是,希望再次单击标签也会隐藏菜单。所以我添加了这个脚本来覆盖正常的聚焦行为: for (var i=0; i<menu_labels.length; i++) { menu_labels[i].addEventListener('mousedown', function(e){
但是,希望再次单击标签也会隐藏菜单。所以我添加了这个脚本来覆盖正常的聚焦行为:
for (var i=0; i<menu_labels.length; i++) {
menu_labels[i].addEventListener('mousedown', function(e){
e.preventDefault();
adjustFocus(this);
});
}
function adjustFocus(elem) {
if (elem === document.activeElement) {
console.log('elem has focus, let\'s blur it');
elem.blur();
}
else {
console.log('elem has no focus, let\'s focus it');
elem.focus();
}
}
for(var i=0;i这似乎与我以前见过的其他Mozilla focus/blur优先级问题/bug有些关联。例如:
我建议的一种可能的解决方法是,而不是调用elem.blur()
在上面的代码中,您将注意力集中在屏幕外或不可见的元素上,这将有效地模糊在此之前处于焦点的元素。不确定我是否理解您的问题:我看不出FF和Chrome有什么区别。除非我们的Firefox表现不同-不,我试过您的codepen,它们是不同的:在Chrome中,您可以切换打开和关闭菜单。单击一次,菜单会折叠,单击第二次,菜单会折叠。在Firefox中,菜单会保持打开状态。你能确认你可以在FF中切换吗?在这种情况下,我的该死的FF开发者版会出问题。是的,控制台日志也会切换消息。我在windows.74.0(64位)上有最新的FF
.menu { max-height:0; }
.label:focus + .menu { max-height:200px; }
for (var i=0; i<menu_labels.length; i++) {
menu_labels[i].addEventListener('mousedown', function(e){
e.preventDefault();
adjustFocus(this);
});
}
function adjustFocus(elem) {
if (elem === document.activeElement) {
console.log('elem has focus, let\'s blur it');
elem.blur();
}
else {
console.log('elem has no focus, let\'s focus it');
elem.focus();
}
}