GWT - 未触发 onClick
GWT - onClick not triggered
我在表单上有一个非常奇怪的行为。
有许多带有内联验证的文本字段,如果内容无效,会在字段下方显示错误消息。验证在模糊时触发。
页面底部有一个 "Next" 按钮。单击时,将执行验证,如果一切正常,则提交表单。
现在,如果当我单击按钮时必填的空白字段具有焦点,则会发生以下情况:
- onBlur 被触发并执行在线验证
- 显示错误信息
- 页面的其余部分"pushed down"显示错误文本
- 未触发按钮上的 onClick 动作
我最初认为 onBlur 以某种方式阻止了 onClick。然后我注意到当页面向下移动时,鼠标指针不再位于按钮上,因为它被按下了。如果我在足够低的位置点击按钮,这样在 "moving" 之后指针仍然在按钮上,就会触发 onClick。
我用onMouseDown替换了onClick,问题解决了,但是我真的很纳闷这是什么原因。
onClick
不会触发,因为没有点击 - 点击是在同一元素上 mousedown
后跟 mouseup
。如果鼠标不再位于同一个元素上,浏览器就不会将其视为单击 - 我相信在某些情况下当鼠标移动时这甚至无法成为(尝试 link 并移动鼠标,看看它是否仍然遵循 link),但至少在我的测试中,如果你向后滚动,用鼠标向下滚动仍然保持点击。
来自http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mouseevents:
The click event occurs when the pointing device button is clicked over an element. A click is defined as a mousedown and mouseup over the same screen location.
在您的情况下,当鼠标没有移动时,'click' 不会出现在 'an' 元素上,或者如果鼠标下方只有一个元素,即 body 元素,而不是你的想法。
就解决此问题而言,您有多种选择:
- 不要在鼠标按下时滚动页面 - 这对用户来说几乎肯定是 confusing/surprising,无论他们点击什么
- 不需要点击事件,但使用 mousedown(就像你现在正在做的那样)
- 慢慢滚动到新位置,也许有延迟和动画滚动,这样快速点击就不会受到影响。但是请记住,按钮 应该 响应点击,允许用户按住鼠标并可能通过在释放鼠标之前移动鼠标来改变主意。
我在表单上有一个非常奇怪的行为。
有许多带有内联验证的文本字段,如果内容无效,会在字段下方显示错误消息。验证在模糊时触发。
页面底部有一个 "Next" 按钮。单击时,将执行验证,如果一切正常,则提交表单。
现在,如果当我单击按钮时必填的空白字段具有焦点,则会发生以下情况:
- onBlur 被触发并执行在线验证
- 显示错误信息
- 页面的其余部分"pushed down"显示错误文本
- 未触发按钮上的 onClick 动作
我最初认为 onBlur 以某种方式阻止了 onClick。然后我注意到当页面向下移动时,鼠标指针不再位于按钮上,因为它被按下了。如果我在足够低的位置点击按钮,这样在 "moving" 之后指针仍然在按钮上,就会触发 onClick。
我用onMouseDown替换了onClick,问题解决了,但是我真的很纳闷这是什么原因。
onClick
不会触发,因为没有点击 - 点击是在同一元素上 mousedown
后跟 mouseup
。如果鼠标不再位于同一个元素上,浏览器就不会将其视为单击 - 我相信在某些情况下当鼠标移动时这甚至无法成为(尝试 link 并移动鼠标,看看它是否仍然遵循 link),但至少在我的测试中,如果你向后滚动,用鼠标向下滚动仍然保持点击。
来自http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mouseevents:
The click event occurs when the pointing device button is clicked over an element. A click is defined as a mousedown and mouseup over the same screen location.
在您的情况下,当鼠标没有移动时,'click' 不会出现在 'an' 元素上,或者如果鼠标下方只有一个元素,即 body 元素,而不是你的想法。
就解决此问题而言,您有多种选择:
- 不要在鼠标按下时滚动页面 - 这对用户来说几乎肯定是 confusing/surprising,无论他们点击什么
- 不需要点击事件,但使用 mousedown(就像你现在正在做的那样)
- 慢慢滚动到新位置,也许有延迟和动画滚动,这样快速点击就不会受到影响。但是请记住,按钮 应该 响应点击,允许用户按住鼠标并可能通过在释放鼠标之前移动鼠标来改变主意。