场景是这样的:点击输入框失去焦点会触发验证方法,点击提交按钮也会触发验证方法。如果用户点击输入框,然后点击提交按钮,会同时触发失去焦点方法和提交按钮方法,会触发两次验证。我想写验证只触发一次。在开发过程中,我发现在移动端同时发生失去焦点和点击事件时,会先执行失去焦点事件,然后再执行点击事件,也就是说,焦点丢失事件将被执行。时间比点击事件快。我按照这个逻辑写完之后,在PC端按照这个逻辑写结果就出问题了,因为在PC端失去焦点和点击事件同时发生的时候,只有失去焦点事件执行了,并没有执行点击事件,所以我在移动端的那些写法在PC端是行不通的。解决方法:给按钮设置mousedown事件,然后event.preventDefault()阻止mousedown事件中default事件的发生。如果不禁用默认事件,则先执行mouseDown,再执行focus事件。ps:如有不妥欢迎交流~
