Непонятный алгоритм отработки функций
Здравствуйте уважаемые!
Начнём с конструкции: Есть основная страница (я бы сказал подложка) на которой формируются шесть остальных страниц. Переход между страницами осуществляется по вкладкам без перезагрузки (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>'); } } } }); } |
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 знаете. |
В частности кнопка #groups_cams_reload, была задуманна для рефреша страницы (без перезагрузки). Может в этом проблема или не в этом. Посмотрю. Спасибо!
|
Проблема с этим возникнет только при нажатии на эту кнопку, если глюки и без этого - то как я говорил - пошаговая отладка скрипта поможет. На крайняк - console.log() повтыкать.
|
console.log() понавтыкал)) Всё как по часам: Запрос ушёл, данные пришли. Скорее в коде может и косяк, но просто вдруг кто сталкивался с подобным и дело не в моём коде
|
Цитата:
|
Часовой пояс GMT +3, время: 11:34. |