在JavaScript中,focus()虽然比较罕见,但还是比较有用的,
主要是用于获取焦点,说白了,就是自动把光标放到此组件上面,无须用户再次操作。
直接用一个例子说明问题:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>self_focus</title>
<script type="text/javascript">
window.setTimeout(function(){
window.self.focus();//仅在IE中适用
document.getElementById("text_2").focus();
}, 5000);
</script>
</head>
<body>
<input type="text" id="text_1" /><input type="text" id="text_2" />
</body>
</html>
上述代码,设置在打开网页5秒之后,无须用户操作,focus()方法会自动将光标放到id为text_2这个文本框,在IE的运行效果如下:
在野狐禅的运行效果如下:
在IE中,window.self.focus();还会起作用。5秒后,窗口还会自动获得焦点,切换到其他窗口,或者其他程序,等5秒,IE浏览器还会自动返回到前台,成为活动窗口,而在野狐禅等其他浏览器中不适用。火狐、谷歌等为了安全性,设置浏览器无法实现控制用户行为。在其他程序应用时,让浏览器获取窗口焦点这个是无法做到的。最少在浏览器内部js无法做到。 不过对于chrome或者firefox,safari之类的浏览器可以用过Notification这个类来做一个弹出通知。然而notification必须要支持html5,太麻烦。目前要求窗口获取焦点,基本上用alert去实现。
由于IE的window.self.focus();是其作用的,不被禁止的,配合onblur()获取焦点事件,还能构造一个死循环,让IE崩溃,如下的代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>endless_loop_blur</title>
</head>
<body>
<input type="text" onBlur="endless_loop();" id="text1">
</body>
</html>
<script type="text/javascript">
window.self.focus();
document.getElementById("text1").focus();
function endless_loop(){
document.getElementById("text1").focus();
}
</script>
运行效果如下:
开始先在将光标放到text1这个文本框,之后马上触发对话框的onblur获取焦点事件调用endless_loop函数,继续不停地将光标放到text1这个文本框,当然此处的代码,写成self.focus()也是可以的,此处的self特指text1这个文本框。
上述死循环在野狐禅、谷歌等浏览器不适用,相当于无限的alert()被禁止一样。