у меня есть форма с флажками как это:
<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
Конечно, вы также можете поместить «ключ» в квадратные скобки (т. Е. Дать каждому полю фактическое уникальное имя). Что-то вроде «тип [1]», «тип [2]» и «тип [3]». PHP по-прежнему помещает его в массив (с ключами по этим числам), и JS тоже может получить к ним доступ.
В javascript вы можете использовать f['type[]']
вместо f.type
.
Только php меняет [] на массив.