<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> 鼠标点击事件 </title>
<script type="text/javascript">
var pwd=document.getElementById("password").value;
function message(){
if(pwd==""){
confirm("请输入密码后,再单击确定!");
}else{
alert("登陆成功");
}
}
</script>
</head>
<body>
<form>
密码:<input name="password" type="password" id="password">
<input name="确定" type="button" value="确定" onclick="message()"/>
</form>
</body>
</html>
按照加载当顺序,当你加载 js 的时候,DOM 都还没有构建完成呢,你拿到的 document.getElementById("password") 是个 null,null 怎么会有 value 呢?所以一定会报错。
放在函数里面是因为当你点击的时候 DOM 已经构建完成了,所以 pwd 是一定存在的,所以不会报错。
另外放在函数外面的确是全局变量,但是在网页加载顺序上不对,js 是个脚本语言,不能没有 DOM 的时候你去操作了 DOM,那浏览器渲染这个 DOM 的时候是听谁的。
你可以把整段script移到body那边去,就可以写成全局变量了。个人理解是网页按顺序加载下来,如果全局变量的话,取不到后加载的节点。等网页加载完成,在声明变量才可以取到,所以写在函数内。