近来在做一个注册表单时,发现jquery的focus获取不到焦点的问题。
用户填写信息的时候,若邮箱为空,则提示 请填写邮箱,并将光标置于填写邮箱的文本框里,方便用户的再次输入。
我们会使用jquey的blur()和focus()两个函数来实现上面的需求:
$("#email").blur(function(){ if($("#email").val()==''){ alert('请填写您的邮箱'); $("#email").focus(); } })
代码解释:当填写email的文本框失去焦点时,如果填写的邮箱为空,则弹出 '请填写您的邮箱' 的提示,并重新获得该文本框的焦点,方便用户重新输入。
以上代码在ie浏览器上运行正常,达到预期效果。但在Firefox浏览器下,对话框是弹出来了,但是却获取不到焦点。
代码是没有问题,那考虑到的应该是兼容问题了。FF和IE在兼容性方面的确给我们带来了很多麻烦。
出现这个问题的原因应该是FF和IE的关于blur和focus的机制不一样导致。查找资料发现,Firefox的focus只能在blur之前。
知道了原因,利用settimeout延迟是解决问题的好办法。
修改代码如下:
$("#email").blur(function(){ if($("#email").val()==''){ alert('请填写您的邮箱'); //$("#email").focus(); window.setTimeout (function(){ document.getElementById ('email'). select();},0 ); } })
经测试,IE和Firefox下完美通过。
声明:如需转载,请注明来源于www.webym.net并保留原文链接:http://www.webym.net/jiaocheng/515.html