Па З.
9 сообщений
#12 лет назад
Здравствуйте уважаемые!

Я к вам с довольно таки нубским вопросом, но ни как не решаемым моими силами.
Есть функция, формирующая из данных базы <option> и вставляющая ИХ в <select>.
Сам <select> находится в диалогом окне. При запуске диалогового окна, запускается эта функция и формирует <option>.
Диалоговое окно создано для создания и редактирования определённого ОБЪЕКТА, то есть окно не закрывается после действия с ним, но обновляется страница (что бы отобразить изменения). И тут наступает проблема: Диалоговое окно вновь запускает эту функцию и наполняется очередной порцией абсолютно таких же <option> (то есть было три, а стало шесть, по два одинаковых).

Помогите оградиться от самооплодотворения <option> или наведите на мысль.
Заранее благодарю всех тех, кто откликнется!


function select_group() {
var vr_url = cam_control+"/cgi-bin/admin.pl?m=selectgroup";
return $.ajax({
type: 'GET',
dataType: 'json',
cache: false,
url: vr_url,
success: function(data){
if(data.error != undefined) {
if(undefined != err_lang) {
alert('Ошибка: '+err_lang);
}else{
alert('Возникла неизвестная ошибка, попробуйте позже. ('+data.error+')');
}
} else {
for(var selgr in data)
{$("#selusers")
.append('<option value="' + data.user_id + '">' + data.user_login + '</option>');}
}
}
});
}
Елена Б.
6863 сообщения
#12 лет назад
Мысль проста и однозначна. Выполнять фрагмент кода только один раз.
Оффтопик
Более глубинная мысль... сначала учиться программировать уже потом - кодить...
Па З.
9 сообщений
#12 лет назад
)) Да вы шутник (шутница)! Я понимаю, что выполнить код нужно один раз, а при повторном обращении (если страница не была обновлена вручную или диалоговоеокно не запущено заного) игнорировать. Вопрос так состоял немного иначе)) Как?
Виталий Москвин
204 сообщения
#12 лет назад
Очищайте диалоговое окно перед загрузкой нового опшина. У вас там append()
Цитата ("Jops"):
$("#selusers"

А это надо понимать селект?
Почтайте документацию по jquery. Она не такая большая.
Есть такой метод replaceWith() например. А вообще вариантов решения вашей проблемы может быть много.

И еще... Почему вы не формируете опшины в перловском скрипте? Отдавали бы уже готовый html и аппендили его без всяких циклов.
Па З.
9 сообщений
#12 лет назад
Спасибо за совет! Применим, изучим. А по поводу Perla. Ну я доделываю за человека код, остались штрихи, а менять механизм, задуманный изначально, не с руки)
Елена Б.
6863 сообщения
#12 лет назад
Цитата ("Jops"):
Я понимаю, что выполнить код нужно один раз, а при повторном обращении (если страница не была обновлена вручную или диалоговоеокно не запущено заного) игнорировать. Вопрос так состоял немного иначе)) Как?


Ну хоть элементарно, по принципу "против лома нет приема":

var myvar = 0;    // глобальная, один раз при загрузке.
//=============================
if (myvar == 0) { // внутри функции
// твой код
myvar =1;
}


не ругайте сильно, из экономической целесообразности иногда злоупотребляю костылями, особенно в js

Цитата ("kriptograf"):
Очищайте диалоговое окно перед загрузкой нового опшина. У вас там append()

Может вылезти боком, если элементы обрабатываются еще в других местах, или банально, если надо помнить что заполнено. Это повлечет еще больше костылей
Па З.
9 сообщений
#12 лет назад
floppox, Спасибо за способ!
Елена Б.
6863 сообщения
#12 лет назад
Не совсем понятно написала. Немного отредактировала предыдущий пост
Виталий Москвин
204 сообщения
#12 лет назад
Цитата ("floppox"):

Может вылезти боком, если элементы обрабатываются еще в других местах, или банально, если надо помнить что заполнено. Это повлечет еще больше костылей

Абсолютно согласен. Мало вводных, что бы давать конкретные советы. Я предположил, что аяксом подтягиваются данные, и формируются опшины. А ТС описал проблему, что у него сначала три опшина, при второй итерации шесть и т.д. Следовательно аппенд в этом случае не к месту.