我一页上有一个div.它有一个onclick事件处理程序.当用户点击div时,我希望会调用事件处理程序.但是CSS规则也有:当div有焦点时,它会向右移动50个像素(远离鼠标指针).因此,onclick事件处理程序不会被调用,即使用户在开始时清楚地点击了div.就好像浏览器首先应用了CSS,然后才决定用户点击了什么.

我在这里做了一个简单的演示:https://jsbin.com/yalazam/edit?html,css,console,output点击第四列中的黄色方块(即the div),然后查看第三列中的控制台.只会出现一条信息"focus square",而不会出现一条信息"click square".

这种行为有意义吗?它有用吗?或者我应该把它当作浏览器的一种奇怪行为来接受吗?

推荐答案

此处的相关点包括点击事件的definition:

当指针位于元素内部时,同时按下和释放定点设备按钮(例如鼠标的主鼠标按钮)时,元素将接收click事件.

这意味着在您的示例中,没有对目标div触发click事件,因为尽管鼠标按下发生在该div内,但释放发生在其移动后(除非用户做了一些不自然的事情),因此不在同一元素内.在body上发生click事件will火灾(在您的示例中,这是MDN中提到的"最具体的祖先"),但这对您倾听并没有太大帮助——因为body上的click可能以许多其他方式发生,并且您不能使用事件的target属性来查看其起源,因为在本例中,正如所解释的,这就是body本身.

如果你需要这个效果,那么根据你感觉最自然的动作,使用mouseDownmouseUp动作,而不是click动作.但真正的答案是不要这样做,因为这可能会让你的用户感到意外,并让他们感到烦恼.

Javascript相关问答推荐

仅圆角的甜甜圈图表

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

从PWA中的内部存储读取文件

无法读取未定义错误的属性路径名''

我怎么才能得到Kotlin的密文?

IF语句的计算结果与实际情况相反

使用领域Web SDK的Vite+Vue应用程序中的Web程序集(WASM)错误

React.Development.js和未捕获的ReferenceError:未定义useState

如何将innerHTML字符串修剪为其中的特定元素?

使用getBorbingClientRect()更改绝对元素位置

如何在Node.js中排除导出的JS文件

按下单键和多值

警告框不显示包含HTML输入字段的总和

为列表中的项目设置动画

ReferenceError:无法在初始化之前访问setData

使用createBrowserRoutVS BrowserRouter的Reaction路由

Angel Auth Guard-用户只有在未登录时才能访问登录页面,只有在登录时才能访问其他页面

如何用react组件替换dom元素?

无法向甜甜圈图表上的ChartJSImage添加可见标签

使用Java脚本筛选数组中最接近值最小的所有项