6

我有一个带有这样复选框的表单:

    <input type="checkbox" name="type[]" value="1" />Fast Food<br>
    <input type="checkbox" name="type[]" value="2" />Table Service<br>
    <input type="checkbox" name="type[]" value="3" />Cafeteria<br>

当我在名称中使用括号(类型 [])时,我的 php 工作:

    $type=$_POST['type'];

    echo "types are:";
for ( $counter = 0; $counter < sizeof($type); $counter += 1) {
    echo "<br>".$type[$counter];
}

但我的 javascript 不起作用:

    var f = document.addform;
    for (var i=0;i<f.type.length;i++){
        if(f.type[i].checked==true){
            break;
        }
        if(i==(f.type.length-1)){
            alert("No categories entered!");
            valid=false;
        }
    }

但是,如果我去掉括号:

<input type="checkbox" name="type" value="1" />Fast Food<br>

然后 PHP 不起作用,但 javascript 起作用。

这里发生了什么?我应该用什么?

谢谢。

4

4 回答 4

9

PHP 有一个不寻常的系统来处理具有相同名称的多个表单控件,它希望包含名称,[]但它不会在变量名称中使用它们。

JavaScript 没有这个问题。该属性仍将有括号。

当然,方括号在 JS 中有特殊的含义,所以不能使用点符号来访问属性。

f['type[]'][i].checked
于 2010-07-08T20:04:46.310 回答
3

在 javascript 中,您可以使用f['type[]']而不是f.type. 只有 php 将 [] 更改为数组。

于 2010-07-08T20:04:18.150 回答
2

当然,您也可以在方括号之间放置一个“键”(即,给每个字段一个实际唯一的名称)。类似'type[1]'、'type[2]'和'type[3]'的东西。PHP 仍然将它放入一个数组(由这些数字作为键),JS 也可以访问它们。

于 2010-07-08T20:19:39.153 回答
0

您始终可以使用document.getElementsByName(),因为它需要一个字符串作为参数。

像这样:

var f = document.getElementsByName("type[]");
for (var i=0; i < f.length; i++){
    if(f[i].checked == true){
        break;
    }
    if(i == (f.length-1)){
        alert("No categories entered!");
        valid=false;
    }
}
于 2013-01-09T12:02:25.223 回答