【问题标题】:use brackets in checkbox name when using php and javascript?使用 php 和 javascript 时在复选框名称中使用括号?
【发布时间】:2011-03-13 13:21:40
【问题描述】:

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

    <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 起作用。

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

谢谢。

【问题讨论】:

    标签: php javascript forms checkbox brackets


    【解决方案1】:

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

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

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

    f['type[]'][i].checked
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • ... 但不使用问题中给出的语法。您仍然必须将 整个 名称视为属性名称。
        【解决方案4】:

        您始终可以使用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;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-23
          • 1970-01-01
          • 2012-12-20
          • 2011-06-05
          • 2012-05-13
          相关资源
          最近更新 更多