日期:2014-05-16  浏览次数:20419 次

事件返回false时,IE浏览器可以,FireFox浏览器不行.

<!DOCTYPE HTML>
<html>
<body>
<script>
//想实现的功能:如果文本框内容不为数字,则清除内容,使该文本框继续保持焦点,重新输入.
//却发现在IE下可以正常实现该功能,在FireFox下却不行!
function blur1(obj){
if(isNaN(obj.value)){
obj.value="";
obj.focus();
return false;
}
else
return true;
}
</script>

<input type="text" onblur="blur1(this)" />
</body>
</html>

------解决方案--------------------
<!DOCTYPE HTML>
<html>
<body>
<script>
    //想实现的功能:如果文本框内容不为数字,则清除内容,使该文本框继续保持焦点,重新输入.
    //却发现在IE下可以正常实现该功能,在FireFox下却不行!
    function blur1(obj){
        if(isNaN(obj.value)){
            obj.value="";
window.setTimeout(function(){
             obj.focus();
},50)
            return false;
        }
        else
            return true;
    }
</script>    
     
<input type="text" onblur="blur1(this)" />
</body>
</html>
延时执行下试试
------解决方案--------------------
应该是focus和blur的顺序问题,google一下会有一些资料,但是比较有力的证据暂时没有找到~,个人意见,仅供参考:
focus须在blur之后,也就是说:火狐中要focus正常聚焦,则要确保当前没有正在执行的blur事件。

楼主的代码,focus的时候 blur还正在执行,所以无效。而加上setTimeout之后,即使时间设置成0 因为它本质上是异步 所以也会有时间差,而blur则就在这个时间差内完成,完成之后focus自然正常执行~