新手问题:关于JavaScript中onload的问题

 

 写道
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>01重定向</title>
<script type="text/javascript">
window.onload=init;
function init(){
document.getElementById("link").onclick=redirect;
}
function redirect(){
alert("重定向页面");
window.location="http://www.baidu.com";
return false;
}
</script>
</head>

<body>
<a href="test.html" title="重定向" id="link">链接重定向</a>
</body>
</html>

 

 

一个简单的重定向操作而已

 

问:为何要用到window.onload  如果不用onload而直接使用document.getElementById("link").onclick=redirect;确实无法实现重定向的功能。这是为什么呢?

 

 

      本来就一个onclick事件,不是说在单击的时候就能触发redirect()吗?为什么还要先在onload的时候装载啊?

 

 

   初学者,首次提问

w3c对onload的定义
[quote]定义和用法
onload 事件会在页面或图像加载完成后立即发生。[/quote]

[code="JavaScript"]window.onload=init;
[/code]
解释一下这句话的意思:当页面全部加载完成,甚至包括图片以后,再调用init方法(function)

再解释一下
[code="JavaScript"]document.getElementById("link").onclick=redirect;[/code]
这句话的作用是:给id为link的HTML节点绑定点击(click)事件(并没有执行,直到你点击才执行),当点击id为link的节点时,执行redirect方法。

再看看下面语句,这句话才是真正的重定向。
[code="java"]window.location="http://www.baidu.com";
[/code]

[code="js"]window.onload=init;[/code]
这行代码的意思是页面加载完毕后执行init函数,之所以这样做是因为函数在定义的时候页面元素很可能还没有被浏览器加载,也就是说document.getElementById这个函数如果不在页面加载完毕后再执行是很可能找不到所需要的对象的,找不到对象就会报错了

不同的浏览器对JS的加载及执行顺序是不一样的,

但好的做法是当所有的页面元素都加载完成后,再执行JS。

你上面的代码只要把JS放到LINK标签后,也是可以执行的。放在前面,因为IE一加载JS就执行,
JS找不到LINK的ID,所以就会报错了

[quote]但是如果不要onload的话[/quote]

init函数就没法执行,
[code="java"]document.getElementById("link").onclick=redirect;[/code]
就无法绑定click事件。

[quote]对啊~但是如果不要onload的话,点击(click)事件并不能执行redirect方法,不知道这是什么原因~~

我始终认为,只要绑定了(click)事件,无论是否onload,点击就能触发下面的edirect方法 [/quote]
上面说的很明白,把绑定click的代码放到onload是为了等待页面内DOM元素是可用的,如果你连链接元素都取不到,怎么可能绑定事件处理呢?