日期:2014-05-16  浏览次数:20341 次

关于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>