surg30n
Новичок
Затык при рекурсивном обходе
Добрый всем день.
Дали на доработку систему, там есть такой изврат:
Набор input'ов (checkbox'ы) соответствует разделам с идентификаторами "v_{parent_sid}_{sid}"
Необходимо при установке галки у родителя, также обойти явакскриптом его детей.
Код: цепляем все инпуты и смотрим у кого установлен my_id.
Далее разбиваем его в массив и сравниваем sid (ид раздела) и sid раздела-родителя.
Если они совпадают, значит запускаем рекурсивный вызов с chrootом в дочерний раздел.
Затык в том, что после прохода рекурсии в дочерние элементы, работа вызывавшей части кода не продолжается.
поодскажите где кос, моск вынесен основательно...
-~{}~ 29.03.07 16:23:
Вообщем так и не разобрался почему рекурсия не работала, сделал через жоппинг по таймауту...
Код ниже. Модеры, если это хрень, смело делитТе тему
Добрый всем день.
Дали на доработку систему, там есть такой изврат:
Набор input'ов (checkbox'ы) соответствует разделам с идентификаторами "v_{parent_sid}_{sid}"
Необходимо при установке галки у родителя, также обойти явакскриптом его детей.
Код: цепляем все инпуты и смотрим у кого установлен my_id.
Далее разбиваем его в массив и сравниваем sid (ид раздела) и sid раздела-родителя.
Если они совпадают, значит запускаем рекурсивный вызов с chrootом в дочерний раздел.
Затык в том, что после прохода рекурсии в дочерние элементы, работа вызывавшей части кода не продолжается.
PHP:
var elms_cache = document.getElementsByTagName('input'); //cache
function ch_toggle(my_root){
my_root_p = my_root.split('_');
var elms = elms_cache;
for (var i = 0; i < elms.length; i++) {
my_id = elms[i].getAttribute('my_id');
if (my_id) {
my_tmp = my_id.split('_');
is_real = 1; // детки
if (my_root_p[2]!=my_tmp[1]) is_real=0;
if (my_root==my_id || is_real) {
g_i_toggle_check(elms[i].getAttribute('my_id_ex'));
}
// childrens
if (is_real && my_root!=my_id) {
return ch_toggle(my_id);
}
}
}
return true;
}
-~{}~ 29.03.07 16:23:
Вообщем так и не разобрался почему рекурсия не работала, сделал через жоппинг по таймауту...
Код ниже. Модеры, если это хрень, смело делитТе тему
PHP:
var elms_cache = document.getElementsByTagName('img'); //cache
var elms = new Array();
j=0;
for (var i = 0; i < elms_cache.length; i++) {
t_id = elms_cache[i].getAttribute('my_id');
if (t_id) {
elms[j]=new Object;
elms[j]['my_id']=t_id;
elms[j]['my_id_ex']=elms_cache[i].getAttribute('my_id_ex') ;
elms[j]['my_tmp'] = t_id.split('_');
j++;
}
}
function ch_toggle(my_root, to_){
var my_root_p = my_root.split('_');
for (var i = 0; i < elms.length; i++) {
my_id = elms[i]['my_id'];
my_tmp = elms[i]['my_tmp'];
is_real = 1; // детки
if (my_root_p[2]!=my_tmp[1]) is_real=0;
if (my_root==my_id || is_real){
g_i_toggle_check_force(elms[i]['my_id_ex'],to_);
}
// childrens
if (is_real && my_root!=my_id) {
//return ch_toggle(my_id,to_); // рекурсия не работает...
setTimeout( ('ch_toggle("'+my_id+'",'+to_+')'), 10);
}
}
return true;
}