Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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);
    }
}

}
Ответить с цитированием
  #2 (permalink)  
Старый 13.02.2013, 14:10
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от Jopses
click на 54 строке
Так проблемы не решаются/обсуждаются...

Сделай простой тестовый пример - на нем и пойдёт обсуждение.
Может даже при его создании сам всё и поймёшь...
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2013, 14:23
Интересующийся
Отправить личное сообщение для Jopses Посмотреть профиль Найти все сообщения от Jopses
 
Регистрация: 05.02.2013
Сообщений: 20

О каком тестовом примере вы говорите? Вся функция наполняется множеством других функций и данными из БД посредствам PERL. Эта функция написана мною, работает на раз, но когда потребовалось прикрутить такого рода toggle(), появился непонятный баг (потому что по логике вещей она должна работать без проблем). Вот я и спрашиваю может кто встречался с подобным или сам создавал, а если нет то и что либо советовать нет смысла))
Ответить с цитированием
  #4 (permalink)  
Старый 13.02.2013, 14:37
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от Jopses
О каком тестовом примере вы говорите?
О простом но иллюстрирующем проблему...

Смею заверить, что toggle() никаким боком к твоей проблеме не относится.
Ответить с цитированием
  #5 (permalink)  
Старый 13.02.2013, 14:39
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Jopses,
Много букв - чужой код Вы такой читать не станете, либо приятель либо иная заинтересованнось,
Создайте минитест
Ответить с цитированием
  #6 (permalink)  
Старый 13.02.2013, 15:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Jopses,
Ваша проблема обьяснена тут http://javascript.ru/basic/closure#p...-ispolzovaniya читайте вникайте делайте замыкание для переменной var cid.
Ответить с цитированием
  #7 (permalink)  
Старый 13.02.2013, 15:48
Интересующийся
Отправить личное сообщение для Jopses Посмотреть профиль Найти все сообщения от Jopses
 
Регистрация: 05.02.2013
Сообщений: 20

Спасибо. Посмотрю
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кривой input или кривые руки Sadist_dead Элементы интерфейса 7 25.08.2011 16:03