Непонятный алгоритм отработки функций
Здравствуйте уважаемые!
Начнём с конструкции: Есть основная страница (я бы сказал подложка) на которой формируются шесть остальных страниц. Переход между страницами осуществляется по вкладкам без перезагрузки (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, время: 13:21. |