Javascript.RU

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

Динамические списки, проблема
Уже всю голову сломал.
Делаю три динамических списка, по примеру

Все работает, но я хочу, чтобы при загрузке страницы в каждом из трех списков выводилось не:
"-выберите страну-"
"-выберите регион-"
"-выберите город-"

А сразу по умолчанию, например:
"Россия"
"Московская область"
"Москва"

Поэтому кроме
$('#country').change
... и
$('#region').change
...
я также вызываю
$.get(
сразу после
$(document).ready(function () {

с параметром для php-скрипта типа
$('#country:selected').val()
и
$('#region:selected').val()


В html в <select id="country"> из базы сразу приходит перечень стран,
а <select id="region">и <select id="city"> должны генериться с помощью $.get

Так вот второй список <select id="region"> получается, а третий, на основе динамически сгенерированного второго, получается пустой.

Если я для проверки запущу
$('#country option').each (function (){
 	alert (this.text);
});
то получу список стран.

Но
$('#region option').each (function (){
 	alert (this.text);
});
пустой

То есть несмотря на то что он виден в браузере, его значения дальше не передаются.

Но если я запущу перед вызовом генерации третьего списка alert('Любое сообщение'), то после алерта третий список заполняется...
Ответить с цитированием
  #2 (permalink)  
Старый 10.07.2013, 10:50
Интересующийся
Отправить личное сообщение для apollox Посмотреть профиль Найти все сообщения от apollox
 
Регистрация: 16.10.2012
Сообщений: 14

Попробую конкретнее, и упростить )
Есть два списка:
<select id="region">
<option value="1" Selected>Россия
<option value="2">Украина
....
<option value="10">Кахастан
</select>

<select id="currency">
</select>


Задача:
при загрузке страницы сразу вывести в id="currency" для выбранного региона (пусть Россия) перечень валют в option - usd и rub (для Украины это будет usd и grivna, для Казахстана - usd и tenge, и так далее)

Код:
$(document).ready(function () {
    $('#currency').attr('disabled', true);
    $('#currency').html('<option>загрузка...</option>');
    $.get(
        'link.php', //куда отправляем запрос
        'region=' + $('#region :selected').val(), //отправляемые данные - id выбранного региона
        function() { //здесь не разбираю пришедшие данные, а для упрощения пишу что должно добавляться в option для России
            var options = '';
            options += '<option value="usd">USD</option>';
			options += '<option value="rub">RUB</option>';
            $('#currency').html(options);
            $('#currency').attr('disabled', false);
        },
        "json"
    );		
	
	$('#currency option').each(function (){ //пытаемся вывести значения <select id="currency">
	 	alert(this.value);
	});
});


Проблема:
На странице все выглядит корректно, в <select id="currency"> мы видим usd и rub, но при попытке обратиться к этому селекту:
$('#currency option').each(function (){ //пытаемся вывести значения <select id="currency">
	 	alert(this.value);
	});

получаем в alert - "загрузка..." вместо последовательных usd и rub
Но если добавить перед этим алертом еще любой алерт, то все выводится правильно:
alert('qqq');
$('#currency option').each(function (){ //пытаемся вывести значения <select id="currency">
	 	alert(this.value);
	});

Получаем последовательно, вместо "загрузка..." - qqq, usd, rub.

Не понимаю, почему сразу после выполнения кода, без алертов, не могу получить значения <select id="currency">?
То есть выводится
$('#currency').html('<option>загрузка...</option>');
вместо того, что на самом деле уже сидит в <select id="currency">
Ответить с цитированием
  #3 (permalink)  
Старый 10.07.2013, 18:05
Интересующийся
Отправить личное сообщение для apollox Посмотреть профиль Найти все сообщения от apollox
 
Регистрация: 16.10.2012
Сообщений: 14

Неужели никто не знает? Я новичок в jquery, мне казалось что где-то что-то элементарно не учел...
Ответить с цитированием
  #4 (permalink)  
Старый 10.07.2013, 18:36
Аватар для animhotep
Профессор
Отправить личное сообщение для animhotep Посмотреть профиль Найти все сообщения от animhotep
 
Регистрация: 17.01.2013
Сообщений: 887

сделайте короткий рабочий пример, с несколькими полями
Ответить с цитированием
  #5 (permalink)  
Старый 10.07.2013, 19:22
Интересующийся
Отправить личное сообщение для apollox Посмотреть профиль Найти все сообщения от apollox
 
Регистрация: 16.10.2012
Сообщений: 14

Сообщение от nasqad Посмотреть сообщение
потому что запрос ассинхронный, первый алерт тормозит страницу и он выполнится успевает.
Спасибо, а это можно как-то побороть?
Получить значение выбранного option второго, динамического, селекта $('#currency:selected').val() и передать его дальше, как условие для выборки значений для третьего селекта.

Последний раз редактировалось apollox, 10.07.2013 в 20:09.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические формы. ака Выпадающие списки :) sochinec Общие вопросы Javascript 5 18.04.2012 17:19
связанные списки. проблема в сохранении выбора Juri jQuery 0 18.08.2011 17:44
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
динамические списки Shaci jQuery 0 14.12.2009 15:03
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12