[js技巧]解决输入框焦点争夺
在表单验证时,输入框的验证经常会用到onblur事件,当验证不通过,有时会需要调用focus()把焦点移回输入框,就是不输对就不许其他操作那种,虽然应用场景不多,在实际使用时会产生一个焦点争夺的问题:
?
当两个输入框里都是验证不通过的值,焦点在a输入框,当用户点击b输入框时,a输入框的onblur验证方法调用focus()方法触发b输入框的onblur事件,又会要求把焦点设置到b上两个输入框的onblur事件轮流触发,造成焦点争夺死锁.
?
以下示例通过增加一个标志控制事件的执行,并通过setTimeout置回标志,让onblur事件先触发.
?
?