использовать скобки в имени флажка при использовании php и javascript?

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

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

что тут происходит? что я должен использовать?

Благодарю.

Solutions Collecting From Web of "использовать скобки в имени флажка при использовании php и javascript?"

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

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

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

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

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

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

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