8

给定以下 HTML:

<div contenteditable="true">Some text</div>

还有一些用 JQuery 检测点击事件的 JS:

$("div").click(function() {
   alert('click!');
});

如果您选择了div 中的部分文本,Opera 将不会引发 click 事件(在 Linux 上使用 Opera 11.61 和 Windows 上的 11.62 测试)。双击一个单词以部分标记它确实有效。

该事件IE7-9、Firefox、Chrome 和 Safari 中引发。这里有一个稍微修改的JSFiddle

这是预期的行为、JQuery 错误、Opera 错误还是其他?

4

2 回答 2

2

众所周知,点击事件在不同元素和不同浏览器之间具有不一致的行为。在它的核心,当单个元素记录一个 mousedown 和一个 mouseup 时,应该触发一个 click 事件,请参阅jquery doc

我听到的最好的建议来自这里

这是否是一个问题取决于您想要的用户交互。但是你通常应该在鼠标按下/向上注册你的脚本,除非你完全确定你想要点击事件而不是别的。

因此,与您对问题的评论一致,最简单的解决方案是注册 mousedown 或 mouseup (取决于您正在寻找的行为,最接近“点击”的行为将是“mouseup”)

于 2012-04-13T15:51:30.857 回答
2

哪种行为是“正确的”当然是一个有趣的问题。我的看法:我个人认为 Opera 的行为更有意义,因为用户在这里的意图显然不是“点击”某物,而是“选择”某物。

另一方面,我也认为 Opera 应该将其更改为与其他浏览器兼容(除非我们可以让其他浏览器匹配 Opera)。兼容性非常非常重要。所以,与我的 Opera 员工交谈:我认为我们是正确的,我认为我们应该解决这个问题:-p

于 2012-04-27T08:34:44.653 回答