использовать скобки в имени флажка при использовании php и javascript? - PullRequest
6 голосов
/ 09 июля 2010

У меня есть форма с флажками вроде этого:

    <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 ]

9 голосов
/ 09 июля 2010

PHP имеет необычную систему для обработки нескольких элементов управления формы с одним и тем же именем, он ожидает, что имена включают [], но не использует их в имени переменной.

JavaScript не имеетэта проблема.Свойство все еще будет иметь квадратные скобки.

Конечно, квадратные скобки имеют особое значение в JS, поэтому вы не можете использовать точечную запись для доступа к свойству.

3 голосов
/ 09 июля 2010

В JavaScript вы можете использовать f['type[]'] вместо f.type.Только php меняет [] на массив.

2 голосов
/ 09 июля 2010

Конечно, вы можете также поставить «ключ» между квадратными скобками (т.е. дать каждому полю фактическое уникальное имя). Что-то вроде «type [1]», «type [2]» и «type [3]». PHP по-прежнему выбрасывает его в массив (с этими цифрами), и JS также может получить к ним доступ.

0 голосов
/ 09 января 2013

Вы всегда можете использовать 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;
    }
}
...