Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.10.2016, 22:01
Новичок на форуме
Отправить личное сообщение для jony0x Посмотреть профиль Найти все сообщения от jony0x
 
Регистрация: 30.10.2016
Сообщений: 3

работа с массивами
помогите разобраться с проблемой:

имеется создаваемый через смарти массив:
{if isset($country.states) && $country.contains_states}
countries[{$country.id_country|intval}] = new Array();
	{foreach from=$country.states item='state' name='states'}
		countries[{$country.id_country|intval}].push({ldelim}'id' : '{$state.id_state}', 'name' : '{$state.name|escape:'htmlall':'UTF-8'}'{rdelim});
	{/foreach}
{/if}


при работе с этим массивом в дальнейшем заполняется тег select:

function myChangeStates()
{
	var opt = '<option value="">-</option>';
	var id_country = $('select#id_country option:selected').val();
	id_country = parseInt(id_country);
	$('select#id_state').empty();
	for(var state in countries[id_country])
	{
		opt += '<option value="'+state['id']+'">'+state['name']+'</option>';
	}
	$('select#id_state').append(opt);
}


и все вроде работает (т.е. на экране тэг заполняется как надо, значениями), только вот при попытке обратиться к элементам этого селекта начинаются "чудеса"(просто от недостатка знаний иначе назвать не могу)))): все значения созданного массива countries имеют значения "undefined" и обратиться к ним у меня не получается
пробовал выводить тупо на экран:
alert(opt);
выводит примерно следующее:
<option value="">-</option><option value="undefined">undefined</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>...


задача стоит примерно такая: надо сделать выбранной одну из опций селекта, value которой известен, но т.к. она "undefined", то и соответственно попытки отыскать её терпят эпик феил(
выручайте, может хоть нужное направление мысли зададите)))
Ответить с цитированием
  #2 (permalink)  
Старый 31.10.2016, 09:32
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Сообщение от jony0x
выводит примерно следующее:
<option value="">-</option><option value="undefined">undefined</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>
<option value="undefined">undefined</option>...

задача стоит примерно такая: надо сделать выбранной одну из опций селекта, value которой известен, но т.к. она "undefined", то и соответственно попытки отыскать её терпят эпик феил
Как вариант...

<select id='test'>
	<option value="">-</option>
	<option value="undefined">undefined</option>
	<option value="undefined">undefined</option>
	<option value="undefined">undefined</option>
	<option value="undefined">undefined</option>...
</select>
<script>
var val;
alert('val='+val);
val=val||'undefined';
var o=document.getElementById('test');
for (var i=0; i<o.options.length; i++) {
	if (o.options[i].value==val) {
		o.selectedIndex=i;
		break;
	};
};
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 31.10.2016, 11:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А зачем подготовкой массива данных занимается шаблонизатор? И где по этому коду видно, что это передается в JS и под каким именем?
Ответить с цитированием
  #4 (permalink)  
Старый 31.10.2016, 15:55
Новичок на форуме
Отправить личное сообщение для jony0x Посмотреть профиль Найти все сообщения от jony0x
 
Регистрация: 30.10.2016
Сообщений: 3

Действительно, корявый путь я выбрал для создания массива: проще подготовить массив на стороне php и передать его в js (в принципе так я и сделал уже)

теперь уже больше интересна теоретическая сторона вопроса: почему созданный таким образом массив при выводе в браузер чарез селект отображает действительные значения, а при попытке работать с этим селектом в JS все значения всех полей равны undefined

для примера:

<p>вот так отображается в браузере</p>
<select id='test'>
    <option value="">-</option>
    <option value="1">один</option>
    <option value="2">два</option>
    <option value="3">три</option>
    <option value="4">четыре</option>
</select>

<p>а вот так отображается через ALERT</p>
<input type="button" value="Проверить" onclick="test()">
<script>
function test()
{
	var a = '<option value="">-</option>';
    a += '<option value="undefined">undefined</option>';
    a += '<option value="undefined">undefined</option>';
    a += '<option value="undefined">undefined</option>';
    a += '<option value="undefined">undefined</option>';
	alert(a);
}
</script>



отвечая на вопрос
"И где по этому коду видно, что это передается в JS и под каким именем?"
под именем countries
Ответить с цитированием
  #5 (permalink)  
Старый 31.10.2016, 16:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Функция test, это не попытка работать работать с этим селектом в JS, а чепуха полная.

Установка обработчика на динамически создаваемые списки должна производиться либо после их создания и добавления в документ, либо делегироваться ближайшему родителю присутствующему всегда на странице. А получение значения выбранной опции (в случае списка с одиночным выбором), это значение самого списка, искать для этого option:selected совсем не требуется.

Последний раз редактировалось laimas, 31.10.2016 в 16:47.
Ответить с цитированием
  #6 (permalink)  
Старый 31.10.2016, 22:17
Новичок на форуме
Отправить личное сообщение для jony0x Посмотреть профиль Найти все сообщения от jony0x
 
Регистрация: 30.10.2016
Сообщений: 3

я конечно глуп, но не настолько!
часть кода в предыдущем своем посте я привел только как пример того, какие результаты выдает реальный код (нажимаем посмотреть - видим результат, на сам код не смотрим)
В любом случае, спасибо за помощь, проблема уже решена)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами Gerd199 Общие вопросы Javascript 41 05.04.2018 23:36
Работа с массивами, help! tvv90 Общие вопросы Javascript 11 02.02.2016 10:34
Работа с массивами BorisBritva jQuery 6 23.02.2014 18:31
Работа с массивами. Требуется помощь. Кристи Общие вопросы Javascript 3 08.02.2011 18:00
работа с массивами one-two Работа 11 31.01.2011 16:30