验证数字javascript在Chrome中不起作用

验证数字javascript在Chrome中不起作用,javascript,google-chrome,Javascript,Google Chrome,我使用下面的脚本来验证它在IE中工作的数字,但在较新版本的Chrome中不起作用。如果输入大于5,则显示警报窗口,但无法关闭,我必须关闭所有Chrome窗口。如何修复 <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <script> function validate(textarea) { var wan

我使用下面的脚本来验证它在IE中工作的数字,但在较新版本的Chrome中不起作用。如果输入大于5,则显示警报窗口,但无法关闭,我必须关闭所有Chrome窗口。如何修复

<HTML>

<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">



<script>
function validate(textarea) 
{
    var wanted = "12345"
    var check ;
    var x ;
    for (var i=0; i<textarea.value.length; i++) 
    {
        x = "" +textarea.value.substring(i, i+1);
        if (wanted.indexOf(x) == "-1") check = "stop";
    }
    if ( check== "stop")
    {
        alert("use only numbers from 1 to 5 ");
        textarea.focus();
        textarea.select();
    }

    if (textarea.value.length > 1 )
    {
       alert("use only numbers from 1 to 5 ");
       textarea.focus();
       return (false);
    }
}
    </script>
 </HEAD>
<BODY>

 <FORM name="game" >

     <table align="center"  border="0" width="225" bgcolor="#FFFFF0" >

   <TR><TD colspan="9">Fill the cells with  digits 1-5, only one time each.      </TD></TR>
 <TR><TD><INPUT  name="a1" size="1"  value="" onBlur="validate(this)"><TD>    <B>&nbsp;</B></TD>
    <TD><INPUT  name="a2" size="1" onBlur="validate(this)"></TD>
  <TD><B>&nbsp;</B></TD>
   <TD><INPUT  name="a3" size="1"  value="" onBlur="validate(this)">
  </TD><TD><B>&nbsp;</B></TD>
  <TD><INPUT  name="a4" size="1" onBlur="validate(this)"></TD>
   <TD><B>&nbsp;    </B></TD>
  <TD><INPUT  name="a5" size="1" onBlur="validate(this)"></TD>
     </TR>

  </FORM>

 </TABLE>
  </BODY>

由于双焦点,您的脚本基本上处于无休止的循环中,此外,Chrome在警报和焦点方面存在困难:

当检测到一个不是1到5的数字时,stop if事件将焦点转移到输入。但是,第二个if子句也关注元素,这会触发模糊事件,重新启动验证函数

下面是一个有效的例子。我已经用正则表达式更新了你的验证代码。它通过执行负搜索来检查textarea中的值是否匹配1-5。因此,如果任何值与1-5不匹配,则设置检查停止

在那之后,我给focus和select添加了一个超时,它在警报触发5毫秒后触发,导致Chrome不会进入模糊焦点循环

此外,我还向输入添加了maxlength属性,该属性将输入限制为仅一个字符

函数validateextarea{ var=12345 var检查; var x; 如果textarea.value.match/[^1-5]/g{ 检查=停止; } 如果textarea.value.length>1 | |检查==停止{ 警报仅使用1到5之间的一个数字; setTimeoutfunction{ textparea.focus; textarea.select; }, 5; 返回false; } } 用数字1-5填充单元格,每个单元格仅填充一次。