Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Дерево с чекбоксами (https://javascript.ru/forum/dom-window/4459-derevo-s-chekboksami.html)

ilshat 23.07.2009 14:57

Дерево с чекбоксами
 
Здраствуйте господа.

Не подскажите пример скрипта/статью/информацию реализации дерева с чекбоксами на javascript. Проблем с деревом нет. С чекбоксами собственно тоже.
Интересует алгоритм клика на родительском чекбоксе при котором все дочерние чекбоксы принимают состояние родительского.

Дерево может быть каким угодно, с любым уровнем вложенности.

Интуитивно понимаю как это сделать, но вот на практике затрудняюсь реализовать.

Буду рад любой информации и различным примерам. Но без использования фреймворков наподобия dhtmlxTree или jQuery

Kolyaj 23.07.2009 15:03

Цитата:

Сообщение от ilshat
Интересует алгоритм клика на родительском чекбоксе при котором все дочерние чекбоксы принимают состояние родительского.

Алгоритм такой: при клике на родительском чекбоксе все его дочерние чекбоксы принимают то же состояние, что и он.

З.Ы. В чем проблема-то?

ilshat 23.07.2009 15:06

Проблема в реализации. Как найти эти самые дочерние чекбоксы которые относятся именно к этому родителю.

B~Vladi 23.07.2009 15:18

Решений пачка... Пройтись по DOM... Получать их по именам (тогда нужно будет знать, какие имена выбирать, что тоже легко реализуемо).

ilshat 23.07.2009 15:25

Я тоже так думал.
И собственно так оно и есть. Но нашел решения только на фреймворках или на других языках.

Вот и обратился за информацией сюда.

Теория ясна до безобразия, а техническая реализация не очень.

Kolyaj 23.07.2009 15:37

Дерево - это вложенные списки (ol/ul). При такой реализации очень легко найти вложенные чекбоксы.

ilshat 23.07.2009 15:57

У меня дерево построено на таблицах. Но не суть важно.

Постараюсь конкретезировать вопрос.
Какими операторами можно обойти все чекбоксы заложенные в <table></table> или <div></div>

B~Vladi 23.07.2009 15:57

Дерево - это список списков:)
Цитата:

Сообщение от ilshat
У меня дерево построено на таблицах

Переделай.

ilshat 23.07.2009 16:04

Цитата:

Сообщение от B~Vladi (Сообщение 25175)
Дерево - это список списков:)

Переделай.

Слишком много кода уже завязано на этих деревьях.

ilshat 23.07.2009 16:17

Все. Нашел на этом сайте.
<div id="d1">
  <ol id="ol1">
    <li id="li1">1</li>
    <li id="li2">2</li>
  </ol>
</div>

код
var div = document.getElementById('d1')
var elems = div.getElementsByTagName('*')
 
for(var i=0; i<elems.length; i++) alert(elems[i].id)

B~Vladi 23.07.2009 16:22

Цитата:

Сообщение от ilshat
Слишком много кода уже завязано на этих деревьях.

Таблицы ваши только всё усложняют... Но можно пойти и другим путём, не прыгая по веткам DOM-дерева... За каждым чекбоксом, имеющих "вложенные" чекбоксы, закрепляется некое имя - соответствующее именам чекбоксов-детей. А потом из его формы этот массив чекбоксов получаем...

ilshat 23.07.2009 16:55

Цитата:

Сообщение от B~Vladi (Сообщение 25186)
Таблицы ваши только всё усложняют... Но можно пойти и другим путём, не прыгая по веткам DOM-дерева... За каждым чекбоксом, имеющих "вложенные" чекбоксы, закрепляется некое имя - соответствующее именам чекбоксов-детей. А потом из его формы этот массив чекбоксов получаем...

Я делал эти таблицы четыре года назад. Имея слабое представление о реализации деревьев вообще. НТМЛ ветвей дерева формируется на сервере и через ajax подгружается в нужное место.

А на счет имен. Я не смог бы вычислять имя чекбокса потому что если имя родительского было бы
id=checkb1
то имена детей были
id=checkb1_checkb3
id=checkb1_checkb12
id=checkb1_checkb19
то есть имена предсказать было бы невозможно и пришлось бы засовывать их в массив.

А разные имена соотвествуют id-шникам в базе которые не обязательно могут идти с шагом +1.

B~Vladi 23.07.2009 17:03

имена могут быть и одинаковыми для своего набора.

ilshat 23.07.2009 17:29

Вы имеете в виду параметр name ?
И доступ осуществлять через name а не через id?

B~Vladi 23.07.2009 17:45

именно. В форме будет хранится массив этих чекбоксов.

ilshat 23.07.2009 18:58

Спасибо. Мне это пригодится.


Часовой пояс GMT +3, время: 06:07.