У меня есть форма с флажками вроде этого:
<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 нет этой проблемы. У объекта все еще есть скобки.
Конечно, квадратные скобки имеют особое значение в 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; } }