我在表单上有一种非常奇怪的行为。
有许多带有内联验证的文本字段,如果内容无效,则会在字段下方显示错误消息。验证是在模糊时触发的。
在页面底部有一个“下一步”按钮。点击后,将执行验证,如果一切正常,则提交表单。
现在,如果强制的空字段在我单击按钮时具有焦点,则会发生以下情况:
我最初认为onBlur在某种程度上阻止了onClick。然后我注意到当页面向下移动时,鼠标指针不再按下按钮,因为它被按下了。如果我在足够低的位置点击按钮,那么在“移动”指针仍然在按钮上之后,触发onClick。
我用onMouseDown取代了onClick,问题得到解决,但我对这种情况的原因感到很困惑。
答案 0 :(得分:1)
onClick
没有触发,因为没有点击 - 点击是mousedown
后跟同一元素上的mouseup
。如果鼠标不再在同一个元素上,浏览器就不能认为它是一个点击 - 我相信这在某些情况下甚至无法在鼠标移动时出现(尝试链接并移动鼠标,看看它是否仍然跟随链接),但至少在我的测试中,如果向后滚动,用鼠标向下滚动仍然会保持点击状态。
来自http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mouseevents:
单击元素上的指针设备按钮时,会发生单击事件。单击被定义为同一屏幕位置上的mousedown和mouseup。
在你的情况下,当鼠标没有移动时,“点击”不会发生在'an'元素上,或者鼠标下面只有一个元素,它是body元素,而不是你所拥有的元素心。
就修复此问题而言,您有以下几种选择: