-
Есть форма с именем order_details, в форме присутствует один checkbox с именем order_checkbox.
Дело в том что когда чекбокс один - document.order_details.order_checkbox.length возвращает - undefined, когда чекбокса два или более document.order_details.order_checkbox.length - возвращает всё нормально - количество элементов с именем order_checkbox. Что за бред ? почему в первом случае undefined ?
-
никакого бреда в этом нету. единственное, что тут некорректно, так это то, что ты даешь элементам формы одинаковые имена )) - этого надо мягко говоря избегать, т.к. плохой стиль.
а теперь объясню почему именно такой результат. вот создал ты чекбокс (т.е. Input по сути). с чего ты взял что у него есть свойство length? разве это массив или строка?? нет. это все равно что ты напишешь
var i=0; alert(i.length);
так что вполне естественно, что тебе выдает "undefined".
но если браузер видит, что в одной форме несколько элементов с одинаковым именем, то ему приходится как-то выкручиваться, и он создает массив с этим именем и помещает в него все такие элементы. а вот у массива уже есть свойство length - поэтому ты получаешь ожидаемый результат.
зы Если быть точным, то в Gecko чекбокс - это HTMLInputElement, а много чекбоксов - это NodeList. вобще узнать тип объекта можно с помощью оператора typeof
-
Лично я решил проблему просто:
Есть у меня таблица, в конце каждой строки которой чекбокс, есть вверху кнопка "Удалить отмеченные".
Таблица находится внутри формы fchk, у каждого чекбокса в конце строки имя ids[] и соответствующее строке значение. Количество чекбоксов зависит от кол-ва строк в таблице.
Есть функция, которой по нажатию кнопки передаётся путь (rel) и массив или один чекбокс (ids) вот таким образом:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>onclick="askquest2('u ser_reps',document.fchk['ids[]'])"</div>
Сама функция ниже:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>function askquest2(rel,ids) {
if (ids != null) {
var id1="";
if (ids.value > 0) { //значит один элемент, иначе свойство было бы undefined
if (ids.checked) id1 +=ids.value + ",";
}
else { //если undefined, значит массив элементов
for (var i=0; i < ids.length; i++) {
if (ids[i].checked) id1 +=ids[i].value + ",";
}
}
if (id1 != "") {
if (window.confirm('Удалить отмеченные?')) {
id1 = id1.substring(0,(id1.length-1));
window.open('main.php?rel='+rel+'&tp=d el&ids='+id1,'_self');
}
} else {
alert('Вы ничего не выбрали!');
return false;
}
} else {
alert('Вы ничего не выбрали!');
return false;
}
}</div>