Попробую конкретнее, и упростить )
Есть два списка:
<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">