:焦点伪选择器样式在打开新选项卡时未被删除,即使触发模糊事件也是如此

时间:2015-09-30 01:30:28

标签: javascript html css browser css-selectors

我正在使用导航菜单,其中包含一些外部网址链接。导航菜单中有一些焦点样式,比如菜单项在聚焦时获取背景。如果单击某个项(即指向外部链接的锚点),则会打开一个新选项卡并显示该外部链接所表示的页面。我的问题是,即使在用户返回原始选项卡时打开了新选项卡,他仍然可以看到单击的导航菜单项后面的背景。没有:与该menuitem关联的活动样式。

我用js fiddle创建了这个例子来枚举问题:
https://jsfiddle.net/bc5yu44v/2/

<body>
  <a id="selectMe" href="www.google.com" target="_blank" onblur="changeText()">clcik here</a>   
</body>

在这里你可以看到,即使在通过单击锚标记打开新选项卡之后,锚标记也不会松开其:焦点样式,但是您可以看到文本已更改,表明onblur事件已被触发。

任何机构都可以指出如何删除:悬停样式?,这是否可以通过仅使用伪选择器来实现,或者只能通过编写js和切换类来实现?我有一个不使用jquery的限制。我只用chrome和firefox测试过它。

1 个答案:

答案 0 :(得分:1)

这是因为导航离开某个页面会导致页面失去焦点,从而使焦点远离页面中当时可能处于焦点的任何元素,这就是为什么元素的模糊事件被触发。

一旦您导航回页面(或者在这种情况下是包含页面的选项卡/窗口),焦点将返回到当时处于焦点的元素,如果元素上有onfocus事件处理程序,这也会引发。元素在页面或窗口焦点/模糊事件之间不会永久失去焦点。如果你在Windows上,只需切换窗口,切换标签或打开和关闭就可以观察到类似的行为。

您可以通过在事件处理程序的末尾显式调用.blur()来强制元素失去自己的焦点,但我不会使用onblur事件处理程序而是使用onclick事件处理程序来执行此操作,因为否则切换标签等时,element会自动散焦。