jquery onblur事件中调用focus方法获取不到焦点问题
2016-11-30 15:44
363 查看
jquery onblur事件中调用focus方法获取不到焦点问题
问题描述:
这段代码主要用于表单中实时验证输入的内容是否符合规则,
不符合规则当前输入框获取焦点,方便重新键入。
按说这样写,没有问题,
实际效果却不如人意,alert弹出提示框后,当前input输入框并没有获取焦点。
解决方案:
在setTimeout方法中调用focus方法
问题浅析:
是什么原因呢,原来,当前input失去焦点前会调用test方法,
这时,input还没有失去焦点,在test方法中 当前input调用focus方法就会失效。
怎么解决呢,需要了解一下javascript引擎执行任务的原理,
这里简述一下,有什么不对的地方,可以指出。
JavaScript引擎是单线程运行的,并且基于事件驱动,这些事件被放置在一个任务队列中,等待引擎来处理。并且引擎在处理任务时是处理完一个,才会处理另一个任务。
了解了这个原理,问题就凸显出来了,我们执行onblur事件时,input焦点还没有失去,所以再调用focus方法会失效。
使用了setTimeout()定时任务时,javaScript引擎会在任务列表中新添加绑定的任务,这样,调用focus方法的事件,就跟test方法的事件分离,达到了onblur事件执行完成后,input焦点失去,再调用foucs方法获取焦点的效果。
jsp <input type='text' name='name' onblur="test($(this))" /> js function test($ele){ if(true){ alert("测试获取焦点"); $ele.focus(); } }
问题描述:
这段代码主要用于表单中实时验证输入的内容是否符合规则,
不符合规则当前输入框获取焦点,方便重新键入。
按说这样写,没有问题,
实际效果却不如人意,alert弹出提示框后,当前input输入框并没有获取焦点。
解决方案:
在setTimeout方法中调用focus方法
jsp <input type='text' name='name' onblur="test($(this))" /> js function test($ele){ if(true){ alert("测试获取焦点"); setTimeout(function() { $ele.focus(); }, 0); } }
问题浅析:
是什么原因呢,原来,当前input失去焦点前会调用test方法,
这时,input还没有失去焦点,在test方法中 当前input调用focus方法就会失效。
怎么解决呢,需要了解一下javascript引擎执行任务的原理,
这里简述一下,有什么不对的地方,可以指出。
JavaScript引擎是单线程运行的,并且基于事件驱动,这些事件被放置在一个任务队列中,等待引擎来处理。并且引擎在处理任务时是处理完一个,才会处理另一个任务。
了解了这个原理,问题就凸显出来了,我们执行onblur事件时,input焦点还没有失去,所以再调用focus方法会失效。
使用了setTimeout()定时任务时,javaScript引擎会在任务列表中新添加绑定的任务,这样,调用focus方法的事件,就跟test方法的事件分离,达到了onblur事件执行完成后,input焦点失去,再调用foucs方法获取焦点的效果。
相关文章推荐
- AjaxPro2Js调用后台方法AjaxMethod时获取不到Session里的值的问题
- 解决因焦点转移到其它组件,导致在 JFrame 中捕获不到键盘按键事件问题的方法
- 类型:Ajax;问题:ajax调用ashx参数获取不到;结果:ashx文件获取$.ajax()方法发送的数据
- asp.net asp:TextBox控件绑定值后,获取不到新值问题解决方法
- JWindow捕捉焦点事件的方法 WindowFocusListener
- java调用mysql获取不到连接的问题
- 使用PopUpWindow导致Activity组件获取不到焦点问题
- JQuery下focus()无法自动获取焦点的处理方法 jquery如何使文本框获得焦点
- jquery的blur之后,focus获取不到焦点的解决办法
- 火狐下input焦点无法重复获取问题的解决方法
- ligerUI调用$.ligerDialog.open弹出窗口,关闭后无法获取焦点问题
- 布局里item获取不到focus的冲突问题
- spring aop 嵌套调用的问题 (同一方法内调用切面切不到)
- Android之ListView的item获取不到焦点问题
- Android 中 ScrollView中嵌套百度地图v3.4.0 导致地图获取不到焦点问题
- [Phonegap+Sencha Touch] 移动开发10 调用focus方法使输入框获得焦点,不弹出软键盘的解决方法
- 开发笔记:解决安卓GestureOverlayView手势和ListView点击事件、文本框获取焦点冲突的问题
- ligerUI调用$.ligerDialog.open弹出窗口,关闭后无法获取焦点问题
- dwz与xhEditor整合后父子页面的input框有时获取不到焦点的问题
- 闭包 (循环事件获取不到i) 和 各种解决循环获取不到i的解决方法