Ole*_*ral 5 angular angular-reactive-forms
考虑以下演示https://stackblitz.com/edit/angular-pur1dt
无效时,我具有反应式表单控件,其中包含同步验证器和错误消息,显示在字段下方。
当控制失去重点时,将触发验证。控件下方是带有点击处理程序的按钮。问题是,当我单击按钮时,控件失去了焦点,发生了验证,显示了错误消息,并将按钮向下移动。据说这会阻止单击处理程序执行。有什么建议为什么会发生以及如何解决该问题?
我已经用评论更新了演示。注意:仅输入下方的按钮会重现该问题。首次单击后,标题将不会更新。
该问题似乎与 DOM 事件触发顺序有关
根据MDN:
当在单个元素上按下并释放定点设备按钮(通常是鼠标的主按钮)时,将触发 click 事件。
https://developer.mozilla.org/en-US/docs/Web/Events/click
在给定的示例中,元素在您blur输入时就会移动 - 因为验证会立即发生,显示错误并重新定位按钮。
因此,当鼠标悬停在按钮上时,鼠标处于向下状态,但当鼠标向上时,按钮会重新定位。所以click 不会在按钮上触发
有几种解决方法:
mousedown错误显示mousedown和 都mouseup发生(如果mousedown发生在按钮上)mousedown这是事件处理
的示例https://jsfiddle.net/gjbgqqpo/
希望这可以帮助 :)