Показать сообщение отдельно
  #1 (permalink)  
Старый 13.02.2013, 14:02
Интересующийся
Отправить личное сообщение для Jopses Посмотреть профиль Найти все сообщения от Jopses
 
Регистрация: 05.02.2013
Сообщений: 20

Волшебный 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);
    }
}

}
Ответить с цитированием