【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload

有时候,在JavaScript中,即使设置了ID也有可能出现document.getElementById()获取不到的情况,然后你就开始想document是否写错之类的,其实根本就不是你的代码的大小写出现了问题,主要是你还没有搞清楚直接写在<script></script>之间东西与写在window.onload=function(){}里面的东西的区别到底在哪里。

比如如下的非常一段简单代码,在网页中除了一个ID为a,然后里面写了aaaa的图层div之外就再也没有其它东西了,在头部有一段写得“非常规范”的脚本,本来就<script></script>就可以了,与<script type="text/javascript" language="javascript"></script>根本就没有区别的,免得有些人自以为很规范的纪律流,说是因为这个原因而导致下面的一系列的问题。

<!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>onloadtest</title>
<script type="text/javascript" language="javascript">
alert(document.getElementById("a"));
window.onload=function(){
	alert(document.getElementById("a").innerHTML);
	}
</script>
</head>
<body>
<div id="a">aaaa</div>
</body>
</html>
<script>
alert(document.getElementById("a").innerHTML);
</script>

这段脚本首先要获取一个图层,然后再通过window.onload之后获得一个a图层的内容,估计很多人以为第一行代码

alert(document.getElementById("a"));

会弹出类似于[Object:HTML ObjectElement]之类的东西吧?我在之前也这样认为的,但实际运行结果,却是如下效果:

咦?怎么第一个alert会弹出空啊?这是因为HTML在加载的时候,是一行一行地编译,动态编译的,它不是像C语言那样,一次性地编译整个程序,再给你运行的。也就是所谓的动态编译域与静态编译域的区别。因此,可以解释为什么Javascript读到错误会自动停止执行,也会出现此前我已经提到过的《【JavaScript】变量冲突是可以通过编译的》(点击打开链接)的问题。

回到正题上面来,开始,网页读到第一个alert脚本的时候,网页中根本就没有出现id为a的图层div!所以不能获取是很正常的。

解决方式有两个,一个是使用window.onload=function(){},要求这段脚本必须在所有的网页东西读完才能运行,二是,直接把这段脚本放在最下面</html>之后,这样就可以直接放在<script></script>之中了,脚本脚本,处于脚部的网页运行剧本,望文生义都知道要放在网页的脚部了。这也是我很不爽一些人老是爱在<head></head>写脚本的原因。

当然,通过这个例子,你也要清楚,如果在头部引入javascript,类似<script src="js/jquery-1.11.1.js"></script>之类的,注意,如果引入的Javascript中出现要网页一开始就加载的javascript的话,必须把写着脚本写入window.onload=function(){}

时间: 2024-07-30 23:02:47

【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload的相关文章

每天一个JavaScript实例-展示设置和获取CSS样式设置

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-展示设置和获取CSS样式设置</title> <style> #date{ width:200px; background-color:l

JavaScript 实现彩票中随机数组的获取

1.效果图: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Math.random方法彩票随机数的生成</title> </head> <body> <!-- 设置样式 --> <input type="text" id="text

javascript 行间样式与非行间样式获取方法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> .style001 {width: 300px;height: 300px;margin: 20px;padding: 30px;border: 20px gr

javascript如何动态设置div的样式

javascript如何动态设置div的样式:有时候需要根据需要动态设置div的样式,当然对于稍有经验的javascript开发者来说,这一切都是那么的简单,但是对于初学者或者说没有相关经验的开发者来说可能就是一个不大不小的难关,下面就通过实例简单介绍一下如何实现此效果.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="aut

UNIX文件的权限之“设置用户ID位”

用stat函数可以获取一个文件的状态信息,原型是这样的: int stat(const char *path, struct stat *buf); 其中结构体stat的结构: struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of h

实际用户ID,有效用户ID,保存的设置用户ID

Unix中常见的几个概念,下面做一个解释. 首先需要明确一点,这几个概念都是和进程相关的. real user ID表示的是实际上进程的执行者是谁,effective user ID主要用于校验该进程在执行时所获得的文件访问权限,也就是说当进程访问 文件时检查权限时实际上检查的该进程的"effective user ID",saved set-user-ID 仅在effective user ID发生改变时保存. 一般情况下,real user ID就是进程的effective use

APUE学习笔记——8.11 实际用户ID、有效用户ID、设置用户ID

用户ID的基本概念 在Unix系统中,很多操作涉及到权限问题,这些权限涉及到用户ID和组ID的概念. 组ID和用户ID的原理和相关内容是类似的.下面介绍用户ID. 我们常见见到三种关于用户ID的概念. 实际用户ID:real user ID      (RUID) 有效用户ID:effective user ID    (EUID) 设置用户ID:saved set-user ID    (SUID) 这三个ID实际上都是针对进程而言的. 实际用户ID 标识进程的执行者.可以看做是我们登录的ID

[转载]unix环境高级编程备忘:理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID

转载自http://www.cnblogs.com/stemon/p/5287631.html 一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid. 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限.如果有,则ok,否则报错不能执行.在正常的情况下,一个用户登录之后(假设是A用户),A用户的有效用户ID和实际用户ID是相同的,但

web 用户存储用户信息cookie, cookie的设置,cookie的获取,cookie的移除

设置cookie 值  该函数设置了 cookie 名.cookie 值.cookie过期时间. function setCookie(name,value,day) { var oDate = new Date(); var d = oDate.setDate(oDate.getDate()+day);//设置从当前时间几天后过期 var expires = 'expires='+ oDate; document.cookie = name+"="+value+";&quo