a:active vs mousedown事件preventDefault() - ed

时间:2012-07-13 05:16:28

标签: javascript css firefox cross-browser css-selectors

案例

  • 我们在CSS
  • 中指定了<a>:active状态元素
  • 在JavaScript代码中,我们会听取mousedown事件并因某些原因致电event.preventDefault():)
  • 结果:在 Firefox 中,当我将鼠标光标移到锚点上并单击它时 - 锚点不会显示为:active
  • 我还在一些Chrome / Opera / IE版本中测试了这个问题 - 所有浏览器都将锚点装饰为:active

以下是对此案的测试: http://jsbin.com/azajex/4

问题

在W3C上没有深刻的描述,必须考虑什么active以及什么时候。

但除了FF之外,所有浏览器(可能不是全部?)首先通过CSS引擎处理mousedown并将元素呈现为:active。这似乎是一个很长时间的问题,我在FF 3.6,8.0,13.0中测试了这个案例 - 所有版本的行为完全一样。

那么,在这种情况下浏览器的正确行为是什么?

1 个答案:

答案 0 :(得分:2)

没有'正确行为'。这取决于浏览器的实现,不应该依赖它。这称为undefined behavior。在软件工程中,不应该依赖未定义的行为,因为它没有真正的文档,结果也不可验证。

  

CSS没有定义哪些元素可能处于上述状态[伪类:: hover,:active和:focus],或者如何输入和保留状态。脚本可以改变元素是否对用户事件做出反应,并且不同的设备和UA [浏览器]可能具有指向或激活元素的不同方式。    - W3C CSS Selectors