Выделение всех полей Checkbox в их массиве
print "<input type=checkbox name=students[] value=\"".$stud[id]."\">";
Всем присваивать одно и то же name пришлось для того, чтобы потом можно было обратиться как к элементам массива.
Но тело не в этом. Тело в том, что я хочу предусмотреть на странице возможность выделения/снятия выделения всех студентов сразу. Ну, как водится, создал вот такую функцию на java script:
function toggle() {
if {form.students[0].checked==true)
{ for (i=0;i<form.students.length;i++) {form.students.checked=false}}
else {for (i=0;i<form.students.length;i++) {form.students.checked=true}}
}
И IE мне выдаёт, типа нету такого объекта form.students.0
Как быть?
checkbox нельзя объединят в один массив
лучше всего каждому checkbox присвоить имя students_0, students_1 ...
а потом зная сколько этих полей
в js к ним обращатся через eval
чтото типа:
for (i=0;i<12;i++)
{
eval ('form.students_'+i+'.checked=true');
}
<HEAD>
<SCRIPT name="javascript">
function checkAll(check) {
var boxes = document.testForm.elements.length;
if(check) {
for(i=0; i<boxes; i++) {
document.testForm.elements.checked = true;
}
} else {
for(i=0; i<boxes; i++) {
document.testForm.elements.checked = false;
}
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="testForm">
<INPUT type="checkbox" name="students[]" value="1">1
<INPUT type="checkbox" name="students[]" value="2">2
<INPUT type="checkbox" name="students[]" value="3">3
<INPUT type="checkbox" name="students[]" value="4">4
<INPUT type="checkbox" name="students[]" value="5">5
</FORM>
<INPUT type="button" value="check all" onClick="checkAll(true);">
<INPUT type="button" value="uncheck all" onClick="checkAll(false);">
</BODY>
А если в форме будет другие элементы к каторым применим checked но которые не нужно выделять со всеми
но это не главное
главное здесь 5 полей с одинаковыми именами
на сервере удастся получить значение только первой (или последней...)
<HTML>
<HEAD>
<SCRIPT name="javascript">
function checkAll(check, chk_name) {
var elements = document.testForm.elements.length;
if(check) {
for(i=0; i<elements; i++)
if(document.testForm.elements.type == chk_name)
document.testForm.elements.checked = true;
} else {
for(i=0; i<elements; i++)
if(document.testForm.elements.type == chk_name)
document.testForm.elements.checked = false;
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="testForm" action="process.php" method="post">
<INPUT type="hidden" name="boxes" value="5">
<INPUT type="checkbox" name="students[]" value="1st">1
<INPUT type="checkbox" name="students[]" value="2nd">2
<INPUT type="checkbox" name="students[]" value="3rd">3
<INPUT type="checkbox" name="students[]" value="4th">4
<INPUT type="checkbox" name="students[]" value="5th">5
<INPUT type="submit" name="button" value="Send">
</FORM>
<INPUT type="button" value="check all" onClick="checkAll(true, 'checkbox');">
<INPUT type="button" value="uncheck all" onClick="checkAll(false, 'checkbox');">
</BODY>
------------------
process.php
<?php
if(isset($button)) {
if(sizeof($students)!=0) {
for($i=0; $i<$boxes; $i++) {
if(isset($students[$i]))
echo "Student: '".$students[$i]."'
";
}
} else {
echo "No selected students...
";
}
} else {
echo "no button is set...
";
}
?>
Сработало следующее решение: имя checkbox по прежнему students[]. Обращаюсь к ним ко всем как в последнем примере через form.elements, но отсеиваю не по типу checkbox, а по form.elements.name.substr(0,8)=='student' :)
кстати данные из формочки с checkbox"ами очень хорошо передались по action form и легко обработались php.
вот только хочется знать сколько именно этих checkbox'ов было отмечено. потому как они попорядку заполняются
<input type=checkbox name=pr[]>1
<input type=checkbox name=pr[]>2
<input type=checkbox name=pr[]>3
если отметить 1 и 3 будет создан массив из двух элементов $pr[0] и $pr[1]...