jquery的blur之后,focus获取不到焦点的解决办法

一:很多童鞋可能会遇到这种情况:

jquery的blur之后,focus获取不到焦点。

二:使用场景:

用户填写信息的时候,若邮箱为空,则提示 请填写邮箱,并将光标置于填写邮箱的文本框里,方便用户的再次输入。

想当然的我们会使用jquey的blur()和focus()两个函数来实现上面的需求:

$("#email").blur(function(){
       if($("#email").val()==‘‘){
            alert(‘请填写您的邮箱‘);
            $("#email").focus();
       }
})

三:代码解释:

当填写email的文本框失去焦点时,如果填写的邮箱为空,则弹出 ‘请填写您的邮箱‘ 的提示,并重新获得该文本框的焦点,方便用户重新输入。

在FF上运行test.html后:会发现,弹框是弹出来了,但是却获取不到焦点,很是奇怪吧,代码明显没有错误呀,在IE上面运行结果正常,既有弹出信息,也会获得焦点。

四:那么你肯定就会想到了,这又是一个兼容的问题了。

是的。FF和IE在兼容性方面的确给我们带来了很多麻烦。

五:出现问题的原因应该是FF和IE的关于blur和focus的机制不一样导致。

FF的focus只能在blur之前。

六:那么该怎么解决这个bug呢?

使用 settimeout做个延迟即可。

修改代码如下:

$("#email").blur(function(){
    if($("#email").val()==‘‘){
        alert(‘请填写您的邮箱‘);
        //$("#email").focus();
        window.setTimeout (function(){ document.getElementById (‘email‘). select();},0 );
    }
})
 

七:分别在IE和FF上面运行,完美兼容。

时间: 2024-10-12 23:31:40

jquery的blur之后,focus获取不到焦点的解决办法的相关文章

jQuery同步Ajax带来的UI线程阻塞问题及解决办法

原文:jQuery同步Ajax带来的UI线程阻塞问题及解决办法 俗话说不作死就不会死,今天作死了一回,写了一个比较二逼的函数,遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return.基本的逻辑剥离出来是这样的: function getData1(){ var result; $.ajax({ url : 'p.php'

HBase 高性能获取数据 - 多线程批量式解决办法

在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题.下面首先简单介绍了搜索引擎的性能,然后详细说明了HBase与MySQL的性能对比,这里的数据都是经过实际的测试获得的.最后,给出了采用多线程批量从HBase中取数据的方案,此方案经过测试要比通过自定义Filter的方式性能高出很多. Solr和HBase专辑 1.“关于Solr的使用总结的心得体会”(http:

jquery.min.map 404 (Not Found)出错的原因及解决办法

Chrome 更新后出现了 jquery.min.map 404  (Not Found) 的信息 这个到底是什么东西?查询了一下,得到了以下资料 JQuery 官方解释 摘录一下內容 从 jQuery 1.9.0 版本后在原始代码里会有 @ sourceMappingURL=jquery.min.map 什么是Source map 简单说,Source map就是一个信息文件,里面存储着位置信息.也就是说,转换后的代码的每一个位置,所对应的转换前的位置. 有了它,出错的时候,除错工具将直接显示

jquery中动态新增的元素节点无法触发事件解决办法

在使用jquery中动态新增的元素节点时会发现添加的事件是无法触发的,我们下面就为各位来详细的介绍此问题的解决办法. 比如做一个ajax读取留言列表的时候,每条留言后面有个回复按钮,class为“reply”,如果你用的是$(".reply").click(function(){ //do something... }),想必后面通过ajax加载进来的列表中的回复按钮,点击事件会失效. 其实最简单的方法就是直接在标签中写onclick="",但是这样写其实是有点lo

C#让TopMost窗体弹出并置顶层但不获取当前输入焦点的终极办法

为了使程序在弹出窗口时置顶层且不获取系统输入焦点,避免影响用户当前的操作,来电通来电弹屏软件尝试过N多种办法,例如:弹出前保存当前焦点窗口句柄,弹出时因为使用TopMost系统默认将焦点交给了弹出窗口,弹出后再将焦点还给弹出前的焦点窗口句柄(C#让窗体置顶弹出但不获取焦点).这种方法貌似解决了问题,但是在弹出的时候还是会打断用户的部分操作.经过我们的不断探索和尝试,终于在Form底层取得了突破,效果很好,和qq的弹窗一样不会打扰用户操作. //声明常量:(释义可参见windows API) co

获取定位,苹果IOS10以上不支持h5的geolocation获取不到地理位置信息解决办法

今天开发应用,获取地理位置,最先采用H5的Geolocation的方法来获取地理位置,经过测试发现安卓的机子可以,但是IOS的就是不行,一查资料才知道:10.0苹果版本需要协议为https的才可以获取到地理定位. 而后为了解决此问题,改用百度MAP来获取,具体步骤和代码如下: 1. 打开http://lbsyun.baidu.com/百度地图开放平台 2. 开发-->javascriptApi,点击获取密钥,注册获取密钥 3. 最后上完整代码 <!DOCTYPE html> <ht

微信开放平台获取不到UnionID的解决办法

注册认证开放平台后,也绑定了公众号,也创建了网页应用,但在网页应用扫码登录时根据接口文档获取不到UnionID,后来就想着是不是先要在公众号的接口中调用一次获取用户基本信息(起到一个启动UnionID的作用),在 微信公众平台接口调试工具 https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86&form=%E8%8E%B7%E5%8F%96%E7%94%

jquery 中多个存在依赖关系的ajax调用解决办法

在使用ajax异步调用的时候,可能碰到同时调用多个ajax这种情况.而且多个ajax之间还存在依赖关系.这种情况怎么处理呢?   有两种办法: 一种是多个ajax嵌套调用,这时需要设置async为false,也就是便成同步的了,但是这种方法存在一个弊端,如果后台出现问题,一直忙,不能返回数据,浏览器将出现卡死的情况.   第二种方法是使用队列的方法.将ajax加入到队列中,然后依次调用即可. 这里举个例子. index.html<!DOCTYPE html> <html> <

速卖通外国服务器获取订单信息不稳定的解决办法

首先,吐槽一下速卖通,客服,邮件,论坛,关于技术的问题,没人会帮你解答的,邮件发了,都不回的,感情很不专业. 问题: 由于服务器在外国,在跟速卖通服务器(杭州)获取订单的时候,由于需要多次握手,订单列表订单详情,在本地没问题,放到服务器就会发生多次问题,基本在早上10点后获取不了,10点前也是需要多次获取才能成功,有时干脆直接获取不了,很不稳定. 解决: 申请一个阿里云的服务器作为中转,国外服务器跟阿里云的服务器一个握手,阿里与服务器跟速卖通服务器多次握手,由于都是国内服务器,所以能够稳定获取,