什么是正确的W3C Click事件规范?

问题描述 投票:2回答:1

在Firefox或以前版本的QTWebkit中,在这些情况下不会触发单击事件,这是正常的:

  • mousedown on element> mouseup on child element >>> NO CLICK触发
  • 子元素上的mousedown>父元素上的mouseup >>> NO CLICK触发

http://www.w3.org/TR/DOM-Level-3-Events/#event-type-click https://bugzilla.mozilla.org/show_bug.cgi?id=326851

测试网址:http://jsfiddle.net/3d6dzr02/

document.getElementById("test").addEventListener("click",function(){
  alert("ok");
})
div {
  padding:20px;
  background:red;
}
<div id="test">
  <div style="margin:20px; background:yellow;">
    
  </div>
</div>

适用于最后的chrome版本

我不知道chrome是否正常,或者Firefox是否正确执行了规范。它应该触发事件吗?

javascript html5 webkit w3c qtwebkit
1个回答
0
投票

事实上,Firefox与IE和Chrome的行为不同,当mousedownmouseup发生在不同元素上时,它会触发共同祖先(?)的“点击”。浏览器供应商的投票是:

  • Mozilla bug 1229143(“没有收到关于两个元素的共同祖先的点击事件”) - 没有做出任何决定
  • Chrome issue 484655 合并到543776(“停止发送”点击“鼠标拖过元素”) - 不打算改变他们的行为。
  • IE bug 809003转移到Edge issue #103724(“当mousedown和mouseup事件的光标下面的元素不同时触发了意外的点击事件”) - 标记为固定而没有任何注释(我没有测试它是否确实存在)

我认为即使是最新版本的规范(现在称为The UI Events)也不清楚这个:

当用户按下并释放主指针按钮时,必须在指针指示的最顶层事件目标上调度click事件类型[...]

您可能会认为这意味着“指针指示的最顶层事件目标”对于mousedown和mouseup是相同的,但它并不清楚。

稍后在一个例子中有这样的文字:

触发click事件[..],因为用户已停留在同一元素的范围内。

...支持这样的假设,即规范作者的意图与Firefox中实现的内容一致。

© www.soinside.com 2019 - 2024. All rights reserved.