Javascript.RU

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

Непонятный алгоритм отработки функций
Здравствуйте уважаемые!

Начнём с конструкции: Есть основная страница (я бы сказал подложка) на которой формируются шесть остальных страниц. Переход между страницами осуществляется по вкладкам без перезагрузки (AJAX). На каждой странице формируются свои данные и каждая, исполняет свои функции изменения. Под изменениями я имею ввиду отдельные кнопки для запуска диалоговых окон, формирование в них данных и отправка на сервер. Всего их пять, в каждой находятся 1-2 <select>, которые наполняются <option>, в зависимости от назначенной функции. Сами функции формирования <option> подгружают данные, когда произведён переход на данную страницу (пробовал вариант с подгрузкой непосредственно при запуске диалогового окна, но результат тот же). <select> девять штук, функций 4 (пробовал вариант приписать каждому <select> свою функцию с индивидуальной выборкой из базы, но результат не меняется)


Проблема в следующем: В <select> данные записываются по алгоритму, который мне абсолютно не понятен. То есть:
Зашёл на первую страницу, запустил окно, данные в поле есть.
Зашёл на вторую, запустил, данные в одном <select> есть, во втором нет
Зашёл на третью, запустил, нет данных ни в одном <select>
Вернулся на первую, запустил, уже пусто.
Опять на вторую, запустил, оба <select> заполнены
На третью, аналогично
На четвёртую, один заполнен, второй нет
Обратно на третью, пустой один и Т.Д.

В FireBag показывает, что данные пришли, функция(ии) отработала корректно.
Я думаю, проблема не в коде, а в том, что я чего-то не знаю. Возможно, какого то алгоритма взаимодействия.
Очень прошу помочь, потому что уже замордовался с этим.
Ниже приведены две функции. Одна (основная на странице) формирует кнопки с диалоговыми окнами и подгружает необходимые данные, Вторая формирует один из <select> в обоих диалоговых окнах.
Заранее благодарю всех откликнувшихся!



// Главная функция своей страницы
function func_cams_groups() {
    $("#groups_cams_reload").click(function(){
        func_cams_groups();
    });

    $("#rules_camgroups_create").click(function(){ // В этом окне формируются  select_groups_cams(), select_groups()
        $("#rules_camgroups_form").dialog({ // Вешал функции формирования <option> сюда, вместо подгрузки на страницу. Результат тот же, то есть не корректный
            title: 'Создание\\Редактирование прав группы',
            width: 'auto',
            height: 'auto',
            resizable: false,
            cache: false,
            autosize: true,
            modal: true,
            buttons: {
                "Создать": function() {
                    create_cam_rules_group(this);
                },
                "Отмена": function() {
                    $( this ).dialog( "close" );
                }
            },
            close: function(ev, ui) {
                $('input',this).val('');
            }
        });
    });
    $("#rules_camusers_create").click(function(){ // В этом окне формируются  select_groups_cams(), select_users()
        $("#rules_camusers_form").dialog({ // Вешал функции формирования <option> сюда, вместо подгрузки на страницу. Результат тот же, то есть не корректный
            title: 'Создание\\Редактирование прав группы',
            width: 'auto',
            height: 'auto',
            resizable: false,
            cache: false,
            autosize: true,
            modal: true,
            buttons: {
                "Создать": function() {
                    create_cam_rules_user(this);
                },
                "Отмена": function() {
                    $( this ).dialog( "close" );
                }
            },
            close: function(ev, ui) {
                $('input',this).val('');
            }
        });
    });
    $.when(get_groups_cam_data()).done(function(){ 
        cam_groups_draw(), 
		
		select_groups_cams(), select_users(), select_groups() // Все функции загружаются при переходе на данную страницу
		
		;}).fail(function(){sad();});
}





// Одна из 4 функций формирования <option>
function select_groups_cams(){
    var cam_url = cam_control+"/cgi-bin/admin.pl?m=selectgroupscams"; // Отсюда приходят данные формата JSON
    return $.ajax({
        type: 'GET',
        dataType: 'json',
        cache: false,
        url: cam_url,
        success: function(data){
            if(data.error != undefined) {
                if(undefined != err_lang[data.error]) {
                    alert('Ошибка: '+err_lang[data.error]);
                }else{
                    alert('Возникла неизвестная ошибка, попробуйте позже. ('+data.error+')');
                }
            } else {
               $("#selgroupscams").empty() // Чистка (костыль) при обновлении страницы или окна (отсутствие/присутствие ни как не влияет на данную проблему)   
              for(var selgrca in data){
                        $("#selgroupscams")
                        .append('<option value="' + data[selgrca].cam_gr_id + '">' + data[selgrca].cam_group_name + '</option>');   
              }  
                
            }
        }
    });
}
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2013, 10:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

function func_cams_groups() {
    $("#groups_cams_reload").click(function(){
        func_cams_groups();
    });
 
    $("#rules_camgroups_create").click(function(){...

То есть функция func_cams_groups может вызываться несколько раз (второй и более раз - по клику на #groups_cams_reload). А значит и обработчики click будут навешаны более одного раза. Другими словами на каждый клик будут отрабатывать две и более навешанных функции. В итоге получается хрень. Так что для начала исправить этот момент. А далее - пошаговое выполнение скрипта в помошь, раз уж FireBug знаете.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2013, 11:02
Интересующийся
Отправить личное сообщение для Jopses Посмотреть профиль Найти все сообщения от Jopses
 
Регистрация: 05.02.2013
Сообщений: 20

В частности кнопка #groups_cams_reload, была задуманна для рефреша страницы (без перезагрузки). Может в этом проблема или не в этом. Посмотрю. Спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2013, 11:16
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Проблема с этим возникнет только при нажатии на эту кнопку, если глюки и без этого - то как я говорил - пошаговая отладка скрипта поможет. На крайняк - console.log() повтыкать.
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2013, 11:33
Интересующийся
Отправить личное сообщение для Jopses Посмотреть профиль Найти все сообщения от Jopses
 
Регистрация: 05.02.2013
Сообщений: 20

console.log() понавтыкал)) Всё как по часам: Запрос ушёл, данные пришли. Скорее в коде может и косяк, но просто вдруг кто сталкивался с подобным и дело не в моём коде
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2013, 12:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Jopses
дело не в моём коде
Ну да, дело в плохой погоде наверне )
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать алгоритм выборки в javascript? Isaac Общие вопросы Javascript 13 06.02.2013 11:15
Волновой алгоритм Ли с 8-ми направлениями boy_cow Общие вопросы Javascript 6 04.10.2012 21:08
Алгоритм работы обработчика события salikoff Events/DOM/Window 1 20.09.2012 23:46
Спецификация Ecma-262. Пункт 8.7.2 PutValue(V,W) не до конца ясен алгоритм. vandy3 Общие вопросы Javascript 0 09.01.2012 17:31
Как получить список пользовательских функций объекта window? Маэстро Events/DOM/Window 13 03.07.2010 13:20