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>

名前 (type[]) に角かっこを使用すると、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 に答える