Волшебный toggle() или кривые руки?
Здравствуйте уважаемый!
Столкнулся с абсурдностью toggle(), хотя наверное это моя логика столкнулась с абсурдом. Задача в следующем: Функция ниже формирует Таблицу ГРУППА КАМЕР -- ПОЛЬЗОВАТЕЛИ -- и ПРАВА ПОЛЬЗОВАТЕЛЕЙ на эти группы. В свою очередь после каждой ГРУППЫ КАМЕР формируются <tr> с КАМЕРАМИ входящими в данную группу (+ отношения прав к каждому пользователю). Предполагалось, что при клике по <tr> в которой формируется ГРУППА КАМЕР и её ПРАВА, будут появляться/скрываться КАМЕРЫ со своими ПРВАМИ, входящие в данную группу Проблема: click отрабатывает своё, но странно. При нажатии на любую <tr> с ГРУППОЙ КАМЕР, всегда появляются/ скрываются КАМЕРЫ относящиеся к последней ГРУППЕ КАМЕР (после неё конечно же). Остальные камеры как были скрыты, так и остались. Если кто сталкивался с подобным, прошу помощи или хоть наводку куда копать. Если что не понятно, отвечу и разжую более подробно. Благодарю всех тех кто откликнется! PS: click на 54 строке function rules_draw() { var usr_table = $("#rules_list"); $('thead',usr_table).remove(); $('tbody',usr_table).remove(); var temp_line = null; // Шапка таблицы var temp_head = $('<thead/>', {}); var temp_line = $('<tr/>', {}); var temp_line_2 = null; $(temp_line) .append($('<th/>',{ text: 'Камера/Пользователи' })); /********************************************************************************************/ //Создание ПОЛЬЗОВАТЕЛЕЙ в заголовке таблицы (<th>) for (var usr_line in users) { var usr = users[usr_line]; if(usr == null) {continue;} $(temp_line) .append($('<th/>',{}) .append($('<div/>',{ html: '<b>'+usr.user_login+'<b/><br/>', "class": lang.rules.allowedbox[usr.is_admin] }).bind('click',(function(usr){return function(){adm_usr(usr.user_id)}})(usr)) .append($('<span/>',{html: '<span class="tip">(id: '+usr.user_id+')</span><br/>'})) ) ) ; $(usr_table).append(temp_line); } $(temp_head).append(temp_line); $(usr_table).append(temp_head); // Тело таблицы /********************************************************************************************/ //Создание ГРУПП КАМЕР в первой колонке таблицы (<td>) $temp_line = null; for (var cid in rules_all) { var rules = rules_all[cid]; //В cid приходят ID группы камер if(rules == undefined || rules == null) {continue;} temp_line = $('<tr/>',{id:'rules'+cid}); $(temp_line) .click(function () {$(".group"+cid).toggle();}) //click клеится на <tr/> с классом ("class": 'group'+cid), который вешается на камеры относящиеся к своей ГРУППЕ КАМЕР и должен по нажатию показывать/скрывать список камер (вместе с ячейками прав), содержащихся в данной группе .append($('<td/>',{}) .append($('<div/>',{ html: '<b>'+rules[usr.user_id].cam_group_name+'<b/><br/>', "class": lang.rules.allowedbox[rules[usr.user_id].rule_cam_status_user]}) .append($('<span/>',{html: '<span class="tip">(id: '+cid+')</span>'})) ) ); /********************************************************************************************/ //Создание ПРАВ на пересечениях ПОЛЬЗОВАТЕЛЬ -- ГРУППА КАМЕР (<td>) for (var usr_line in users) { var usr = users[usr_line]; if(usr == null) { continue; } $(temp_line) .append($('<td/>',{}) .append($('<div/>',{ html: 'Разрешено для пользователя: '+lang.rules.allowed[rules[usr.user_id].rule_cam_status_user]+'<br />' +'Разрешено для группы: '+lang.rules.allowed[rules[usr.user_id].rule_cam_status_group]+'<br />' +'Итог: '+lang.rules.allowed[rules[usr.user_id].result], "class":lang.rules.allowedbox[rules[usr.user_id].result] })) ) ; } $(usr_table).append(temp_line); /********************************************************************************************/ //Создание КАМЕР входящих в ГРУППУ КАМЕР в первой колонке таблицы (<td>) for (var cam_id in rules_cam[cid]) { temp_line_2 = $('<tr/>',{id:'cam'+cam_id, "class": 'group'+cid}); $(temp_line_2).hide() //Эти <tr/> по умолчанию скрыты. При click показываются или обратно скрываются .append($('<td/>',{}) .append($('<div/>',{ html: '<b>'+rules_cam[cid][cam_id].cam_name+'<b/><br/>', "class": 'f-cams' }) .append($('<span/>',{ html: '<span class="tip">(id: '+cam_id+')</span>' })) ) ); /********************************************************************************************/ //Создание ПРАВ на пересечениях ПОЛЬЗОВАТЕЛЬ -- КАМЕРА (<td>) for (var usr_line in users) { var usr = users[usr_line]; if(usr == null) { continue; } $(temp_line_2) .append($('<td/>',{}) .append($('<div/>',{ html: lang.rules.cams[rules_cam[cid][cam_id][usr.user_id].result], "class":lang.rules.allowedcamsbox[rules_cam[cid][cam_id][usr.user_id].result] })) ) ; } $(usr_table).append(temp_line_2); } } } |
Цитата:
Сделай простой тестовый пример - на нем и пойдёт обсуждение. Может даже при его создании сам всё и поймёшь... :) |
О каком тестовом примере вы говорите? Вся функция наполняется множеством других функций и данными из БД посредствам PERL. Эта функция написана мною, работает на раз, но когда потребовалось прикрутить такого рода toggle(), появился непонятный баг (потому что по логике вещей она должна работать без проблем). Вот я и спрашиваю может кто встречался с подобным или сам создавал, а если нет то и что либо советовать нет смысла))
|
Цитата:
Смею заверить, что toggle() никаким боком к твоей проблеме не относится. :) |
Jopses,
Много букв - чужой код Вы такой читать не станете, либо приятель либо иная заинтересованнось, Создайте минитест |
Jopses,
Ваша проблема обьяснена тут http://javascript.ru/basic/closure#p...-ispolzovaniya читайте вникайте делайте замыкание для переменной var cid. |
Спасибо. Посмотрю
|
Часовой пояс GMT +3, время: 22:28. |