你确定你真的知道什么时候用window.onload吗?
这个window.onload有时候突然就出现了,不出现的时候也能执行JS,总之感觉这家伙神出鬼没的,没有个规律,今天就来扒一扒这货。
<script> var name = document.getElementsByName("username")[0];
name.onfocus = function () { alert(123); }
</script>
<body>
<input type="text" name="username" />
这种情况下,肯定name 是undefined,更别提后面的onfocus了,再来看这种
<body> <input type="text" name="username" /> <script> var name = document.getElementsByName("username")[0]; name.onfocus = function () { alert(123); } </script>
现在name肯定是Object了,但是此时去页面上点击文本框,并不会弹出 123,因为name.onfocus执行的时候,页面还没有加载完成,等到你真正看到文本框的时候,这句话已经执行完了,而你此时去点击文本框的时候,此时的onfocus事件并没有,所以并不会有任何效果。而下面这种情况奇迹就出现了
<script> window.onload = function () { var name = document.getElementsByName("username")[0]; name.onfocus = function () { alert(123); } } </script>
<body> <input type="text" name="username" />
window.onload是指在页面加载完成后执行里面的代码,所以此时再点击文本框,自然就会弹出 123 了。
所以,如果想对页面上的某个元素加上事件的话,其实有2种方式,一种是用window.onload方式,在里面获取到元素对象后定义其事件处理方式。另一种是不采用window.onload
方式,而是在script里定义一个方法,尽管方法里的要获取的元素还没有加载出来,那有什么关系,顶多是个undefined,不会出现效果罢了,而等页面加载完了之后,通过触发事件,而去调用刚刚定义的方法就可实现效果了,像这样
<script> var Test = function () { var name = document.getElementsByName("username")[0]; alert(name.value); } </script> <body> <input type="text" name="username" onfocus="Test();" value="123"/>
就会实现了,好了,大功告成了。
浙公网安备 33010602011771号