【发布时间】:2012-11-10 17:45:54
【问题描述】:
我有一些按钮,它们被赋予了点击深度(即它们在 :active 状态下向下移动了几个像素),但它们会导致问题,因为有时按钮被点击并且没有任何反应。
<button>Button</button>
button:active {
margin-top: 5px;
}
我已经在 jsfiddle 中说明了这个问题:
http://jsfiddle.net/helenst/vUU55/
在 Chrome 中,文本上方和下方都有一条细条,高度等于点击深度,其中不会触发点击事件。 (例如,尝试单击“B”上方的一两个像素)同时接收到 mousedown 和 mouseup,但单击不会触发。
在 Firefox 和 Opera 中,在按钮顶部有一个相同大小的区域,在该区域中鼠标单击没有响应。我发现这更合乎逻辑,因为 mousedown 在按钮内部,而 mouseup 在按钮外部。如果我在该区域向下单击,但在释放之前将鼠标拖回按钮,则会激活单击。
但是,它仍然不完全有意义 - 如果我在按钮周围包裹一个容器(以便所有按钮状态都包含在其中),并检测容器上的事件,问题仍然存在。
如果我删除点击深度,一切都很好。
我想我可以让它响应 mousedown 事件,然后检测文档上的 mouseup,这可能会绕过它 - 但它违反了正常的按钮行为,我想要一个非 JavaScript 解决方案。有人可以帮忙吗?
【问题讨论】:
-
在我看来,为了触发
click事件,mousedown和mouseup的事件目标必须相同。即使您将处理程序绑定到容器,情况也并非如此。 -
所以您是说即使我在 div 上处理事件,按钮也是事件目标?有什么办法可以改变吗?
标签: javascript html css button