0

我有带有复选框和文本字段的 html 页面,并且 JavaScript 能够验证复选框但不能验证文本字段。有人可以帮忙,因为我不确定哪里错了

<html>  
    <head>
    <script type="text/javascript">
     function validator()
    {
        var c = document.getElementsByName("chk");
        var k=false;
          for( var i=0; i<c.length; i++ )
          { 
            if( c[i].checked ) 
            {
               k=true;
              return(true);
            }
          }
      if(k){
              return(true);
              }
              else{
                alert("Select one environment");
                return(false);
              }
          var ap = form.getElementById("a1");
          if(ap.value == "" || ap.length == 0)
         {
        alert("Enter the path");
        ap.setfocus();
        return(false);
         }
          else
          {
            return(true);
          }

                    var p = form.getElementById("a2");
          if(p.value == "" || p.length == 0)

         {
        alert("Enter the path");
        form.p.setfocus();
        return(false);
        }


        return(true);
            }


          </script>
      </head>

     <body>
    <form action="/car.java" onsubmit="return validator(this);">
        <br />
        <p>
            <input name="chk"  type="checkbox" />One
            <input name="chk"  type="checkbox" />Two
            <input name="chk"  type="checkbox" />Three
        </p>
        <br />
        <input name="a1" id="a1" size="123" style="width: 766px; height: 21px;" type="text" />
        </p>
        <p>
            <input name="a2" id="a2" size="123" style="width: 766px; height: 21px;" 
                type="text" />
        </p>
        <textarea cols="95" name="status" rows="11"></textarea>
        <input name="sub" size="28" style="width: 156px; height: 29px;" type="button"
       value="Submit" />
        </p>
        </form>
         </body>  
       </html>
4

2 回答 2

1

问题出在您的函数上,您在程序完成文本字段验证之前返回一个值。您需要捕获变量的返回值,并在方法结束时只返回一次它的值。

像这样的东西

function validator() {
var c = document.getElementsByName("chk");
var k = false,
    isValid = false;
for (var i = 0; i < c.length; i++) {
    if (c[i].checked) {
        k = true;
    }
}
if (k) {
    isValid = true;
} else {
    alert("Select one environment");
}
var ap = form.getElementById("a1");
if (ap.value == "" || ap.length == 0) {
    alert("Enter the path");
    ap.setfocus();
} else {
    isValid = true;
}
var p = form.getElementById("a2");
if (p.value == "" || p.length == 0)
{
    alert("Enter the path");
    form.p.setfocus();
}
return isValid;
}
于 2013-04-07T03:06:19.343 回答
0
if(ap.value == "" || ap.length == 0)

我认为您的意思是ap.value.length == 0,但无论哪种方式都是多余的,因为您已经检查了空字符串。只会if(!ap.value)做。此外,您return甚至在文本框部分运行之前就开始了。

也就是说,您应该考虑使用 HTML5 表单验证。它更清洁,可以防止此类问题。

于 2013-04-07T02:58:40.997 回答