Javascript 正在验证下拉框数组?

Javascript 正在验证下拉框数组?,javascript,drop-down-menu,validation,Javascript,Drop Down Menu,Validation,有人能帮我看看哪里出了问题吗 <script type="text/javascript"> function validateForm(){ var x=document.forms["myForm"]["fname"].value; if (x==null || x=="") { alert("Enter Name"); return false; } var x=document.forms["myForm"]["car[]"].value; if (x==nu

有人能帮我看看哪里出了问题吗

<script type="text/javascript">
function validateForm(){
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
  {
  alert("Enter Name");
  return false;
  }
var x=document.forms["myForm"]["car[]"].value;
if (x==null || x=="")
  {
  alert("Select Car");
  return false;
  }
}
  function add(tbl1) {
    var tb = document.getElementById(tbl1);
    var rowCount = tb.rows.length;
    var row = tb.insertRow(rowCount);
    var colCount = tb.rows[1].cells.length;
    for(var i=0; i<colCount; i++) {
        var newCell = row.insertCell(i);
        newCell.innerHTML = tb.rows[1].cells[i].innerHTML;
    }
  }

</script>
</head>
<body>
<form name="myForm" action="post.php" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<br><br>
<p>2. Your previous cars</p>
<table id="cars" border="1">

<tr><td width = "150"><center>Car</center></td>

</tr><tr>

</td><td><select name="car[]">
<option value="" selected=“selected”>Select one please</option>
<option value=Ford> Ford </option>
<option value=Audi> Audi </option>
<option value=Volvo> Volvo </option>
<option value=Nissan> Nissan </option>
<option value=Car 5>Car 5 </option>
</select></td>

</tr></table><br><br>
<input type="button" value="Add Row" onclick="add('cars')"/>
<input type="submit" value="Submit">
</form>

函数validateForm(){
var x=document.forms[“myForm”][“fname”].value;
如果(x==null | | x==“”)
{
警报(“输入名称”);
返回false;
}
var x=document.forms[“myForm”][“car[]”值;
如果(x==null | | x==“”)
{
警报(“选择车辆”);
返回false;
}
}
功能添加(tbl1){
var tb=document.getElementById(tbl1);
var rowCount=tb.rows.length;
var row=tb.insertRow(rowCount);
var colCount=tb.rows[1].cells.length;

对于(var i=0;i您不能有多个输入字段具有相同的
名称
属性。如果按
添加行
按钮,您的组合框将重复,但它保持相同的名称,因此
document.forms[“myForm”][“car[]”值;
将变得未定义

解决此问题的一种方法是:

设置为
,并将javascript的内部循环更改为以下内容:

newCell.innerHTML 
     = tb.rows[1].cells[i].innerHTML.replace("car[1]", "car["+rowCount+"]");

但是,您现在需要迭代每个
car[x]
以完成验证。

您的问题是
文档。当有一个名为“car[]”的select元素时,forms[“myForm”[“car[]”]
是一个元素,但当有多个名为“car[]”的select元素时,它是一个数组(元素)。您的验证假定它始终是一个元素,因此失败

您可以测试
document.forms[“myForm”][“car[]”]
是否是一个数组,您可能会发现它很难使用,或者您可以使用
document.getElementsByName(“car[]”)来测试它,它将始终返回一个元素数组供您迭代

如果数组为空或第一个元素不符合有效性条件,则以下
if
将计算为true

var x = document.getElementsByName("car[]");
if (x.length == 0 || x[0].value == null || x[0].value == "") { /* do stuff */ }

此解决方案假定只有第一个字段必须有效(鉴于缺少“移除汽车”按钮,这似乎是最合理的;如果这不是您的意图,请对它们进行迭代,如果有任何字段不符合有效性条件,则返回false。

我想更正这一点:具有相同名称的多个输入字段是有效的(对于单选按钮确实是必需的),必须是唯一的
id