Массив чекбоксов в JavaScropt. Определение индекса

CM
На сайте с 04.02.2008
Offline
26
747

Профессионалы клиентской стороны, помогите, пожалуйста решить задачу.

Есть три группы чекбоксов:

<input type="checkbox" name="ncad1" value="N" onClick="fAd(this)" >Не 

<input type="checkbox" name="ncad1" value="N" onClick="fAd(this)" >Не
<input type="checkbox" name="ncad1" value="N" onClick="fAd(this)" >Не
-
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this)" >Не
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this)" >Не
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this)" >Не
-
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this)" >Не
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this)" >Не
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this)" >Не

Вопрос такой. Внутри функции fAd() нужно знать индекс чекбокса в группе, который был кликнут.

function fAd(obj) {

alert(obj.name+'['+obj.???+']');
}

С помошью какого свойства можно получить этот индекс внутри функции? В данном примере (с тремя чекбоксами в каждой группе) он должен быть от 0 до 2.

Например obj.sourceIndex возвращает глобальный номер элемента в форме. А, вот, номер в пределах группы с одинаковым именем не знаю как из объекта получить. Может, это вообще невозможно?

PS: Сама форма динамическая, количество чекбоксов в группе и количество самих групп меняется в зависимости от данных в базе.

Изготовление электронных макетов бланков для распечатки на принтере (http://www.blanki-na-zakaz.net)
I
На сайте с 21.02.2008
Offline
117
#1

Да, на сколько я знаю в объекте параметров принадлежности к группе нет, поэтому можно таким вариантом решить.


function fAd(obj, index) {
alert(obj.name+'['+obj.???+']');
}

fAd(this, 1), где 1 - индекс группы.

<input type="checkbox" name="ncad1" value="N" onClick="fAd(this, 1)" >Не
<input type="checkbox" name="ncad1" value="N" onClick="fAd(this, 1)" >Не
<input type="checkbox" name="ncad1" value="N" onClick="fAd(this, 1)" >Не
-
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this, 2)" >Не
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this, 2)" >Не
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this, 2)" >Не
-
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this, 3)" >Не
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this, 3)" >Не
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this, 3)" >Не
S
На сайте с 27.02.2007
Offline
60
#2

Читай о методах форм, думаю, поможет. А вообще, думаю, задача стоит неправильно.

Что это?

<input type="checkbox" name="ncad3" value="N" onClick="fAd(this)" >Не

<input type="checkbox" name="ncad3" value="N" onClick="fAd(this)" >Не

<input type="checkbox" name="ncad3" value="N" onClick="fAd(this)" >Не

Одно и то же имя, одно и то же значение, один и тот же текст... Как говаривал Генри Форд, машина может быть любого цвета, лиж бы этот цвет был черным. И что бы человек не выбрал, он все равно выберит checkbox" name="ncad3" value="N" :) Это фатум. Ситуация необратима и неизбежна. ВЫБОРА НЕТ!

Создание сайтов, документация... (http://site3k.net/), сайт нашей дизайн-студии (http://website-it.ru/)
C
На сайте с 01.09.2007
Offline
90
#3

Ты не путаешь чекбоксы с радио буттонами?

Давай чекбоксам разные имена (как все делают) и твоя проблема отпадет.

malls
На сайте с 08.08.2005
Offline
255
#4

Чекбокс - объект DOM

Группа чекбоксов - группа объектов DOM

Перебрать циклом группу объектов DOM, проверяя свойства value (или даже checked есть, кажется) - не проблема...

CM
На сайте с 04.02.2008
Offline
26
#5
ippoman:
Да, на сколько я знаю в объекте параметров принадлежности к группе нет, поэтому можно таким вариантом решить.

fAd(this, 1), где 1 - индекс группы.

Да. В принципе я могу сделать и так:

<input type="checkbox" name="ncad1" value="N" onClick="fAd(this, 0)" >Не 

<input type="checkbox" name="ncad1" value="N" onClick="fAd(this, 1)" >Не
<input type="checkbox" name="ncad1" value="N" onClick="fAd(this, 2)" >Не
-
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this, 0)" >Не
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this, 1)" >Не
<input type="checkbox" name="ncad2" value="N" onClick="fAd(this, 2)" >Не
-
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this, 0)" >Не
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this, 1)" >Не
<input type="checkbox" name="ncad3" value="N" onClick="fAd(this, 2)" >Не

function fAd(obj, index) {

alert(obj.name+'['+index+']');
}

... но я думал, что уже в самом объекте есть свойство с номером индекса в группе чекбоксов/радиобатонов с одинаковым именем. Раз такого нет, придется индекс засовывать вторым аргументом в функцию...

Хотя я удивлен, что порядковый номер элемента в пределах всей формы разработчики предусмотрели (obj.sourceIndex), а в пределах группы элементов с одним именем - нет.

PS:

1. То что у всех чекбоксов одно и то же значение, это потому что я отразил только часть формы. Там каждое "Не" соответствует другому чекбоксу с названием улицы (для инверсии: <улица_такая-то>/не<улица_такая-то>). Так заказчик хочет.

2. Радиобатоны не подходят, т.к. нужна навороченная постоянно модернизируемая заказчиком логика: "если чекаешь этот, что эти снимаются автоматически, если снимаешь тот, вот эти два автоматически чекаются и т.д."

Разные имена в группе давать не вижу смысла, т.к. форма генерируется автоматически. Реально в группе чекбоксов намного больше, чем я отобразил. К ним удобнее обращаться через индексы в пределах одной группы.

3. Свойство checked не помогает, т.к. нужно проверять не состояние чекбокса, а был ли на нем клик. Результатом клика может быть, как checked так и unchecked.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий