<!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=gb2312" />
<title>无标题文档</title>
</head><body>
<form id="form1" name="form1" method="post" action="">
  <label>
  <input type="text" name="name"   onblur="return Name()" />
  </label>
  <p>
    <label>
    <input type="text" name="number"  onblur="return Number()"/>
    </label>
  </p>
</form>
</body>
</html>
<script   language="JavaScript">     
  function   keyEnter()
  {   
          if   (event.keyCode   ==   13)   
          {   
                  event.keyCode   =   9;   
    
          }       
  }   
    
  document.onkeydown   =keyEnter;   
  </script>
<script language="javascript">function Name()
{
  if(document.form1.name.value!="1"&&document.form1.name.value!="2"&&document.form1.name.value!="3")
  {
   alert("只能是1~3编号");
document.form1.name.focus();
return false;
  }}</script><script language="javascript">function Number()
{
  if(document.form1.number.value!="1"&&document.form1.number.value!="2"&&document.form1.number.value!="3")
  {
   alert("只能是1~3编号");
document.form1.number.focus();
return false;
  }}</script>
如果使用这个代码,在没有输入任何值的情况下,程序就会卡死,不能退出,如何修改

解决方案 »

  1.   

    是因为你的function里面有个focus,当你将焦点从name转到number时,触发了name的onblur,弹出提示,因为你加了name.focus();所以焦点又转到name上,又触发了number的onblur,于是又弹出对话框,焦点又转移到number上,又出发name的onblur,这样形成了死循环。去除两个function中的focus()语句就可以避免这个问题,也可以将验证放到表单提交时进行,不用input的onblur触发。
    另外,从提升用户的使用体验来说,使用alert弹出错误提示不是好的方法,你可以将错误提示通过span放在input旁边,现在一般都这么做。