关于js全局变量的问题
这是写的一个验证程序:
<script type="text/javascript">
var a=document.getElementById('text1');
function checkyear()
{
var b=document.getElementById('text2');
if (isNaN(b.value)==true)
{
alert('please enter a valid age');
b.focus();
b.select();
}
}
function check()
{
var a=document.getElementById('text1');
var b=document.getElementById('text2');
if (a.value==""|| b.value=="")
{
alert('输入框不能为空');
if (b.value==""&& a.value!="")
{
b.focus();
}
else
{
a.focus();
}
}
}
</script>
html代码如下:
<body>
姓名:<input type="text" id="text1"><br/>
年龄:<input type="text" id="text2" onblur="checkyear()"><br/>
提交:<input type="button" id="button1" value="提交" onclick="check()">
</body>
现在的结果是可以实现功能,但是我想把
var a=document.getElementById('text1');
var b=document.getElementById('text2');
这个用作全局变量,测试不行,请告诉我为什么,以及解决的办法。
请大家帮帮忙
JavaScript
全局变量
HTML
测试
函数
------解决方案--------------------<script>放到<input>之后
------解决方案--------------------dom加载问题,如果js习惯性放在前面,html放在后面,那么解析js时text1,text2还没生成,所以得到的值都是undefined。
另外最好减少使用全局变量的冲动,特别是这种简单的变量名,如果代码量一大,变量名重复的机会很大,会给你带来很多调试的麻烦。
------解决方案--------------------<!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>无标题文档</title>
<script type="text/javascript">
var a="";
var b="";
function init(){
a=document.getElementById('text1');
b=document.getElementById('text2');
}
function checkyear(){
var reg=/^\d+$/;
if(!reg.test(b.value)){
alert('please enter a valid age');
b.focus();
}
}
function check(){
if(a.value==""
------解决方案-------------------- b.value==""){
alert('输入框不能为空');
if(b.value==""&& a.value!=""){
b.focus();
}else{
a.focus();
}
}
}
window.onload=init;
</script>
</head>
<body>