【问题标题】:What is the correct W3C Click event specification?什么是正确的 W3C 点击事件规范?
【发布时间】:2018-01-01 23:28:48
【问题描述】:

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

  • mousedown on element > mouseup on child element >>> NO CLICK trigger
  • 子元素上的mousedown >父元素上的mouseup >>>没有触发点击

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 html webkit w3c qtwebkit


【解决方案1】:

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

  • Mozilla bug 1229143(“未收到两个元素的共同祖先的点击事件”) - 未做出决定
  • Chrome issue 484655 合并到 543776(“停止在鼠标拖动元素时发送“点击””)- 不打算改变它们的行为。
  • IE bug 809003 移动到 Edge issue #103724(“当鼠标按下和鼠标按下事件的光标下方的元素不同时触发意外点击事件”) - 标记为固定,没有任何 cmets(我没有测试它是否确实如此)

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

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

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

在后面的例子中有这样的文字:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多