Не срабатывает возврат значения из функции
<div id="controls">***</div> <select id="mapping_select_type"> <option> Вид карты </ option> <option value = "HYBRID"> • гибридная карта </option> <option value = "ROADMAP"> • дорожная карта </option> <option value = "SATELLITE"> • спутниковая карта </option> <option value = "TERRAIN"> • физическая карта </option> </select>
$(function() {
var mapping_page = 'mapping';
var mapping_divs = '#' + mapping_page;
var mapping_name = mapping_divs + '_';
var m_type = new Array ('HYBRID', 'ROADMAP', 'SATELLITE', 'TERRAIN');
var mapping_arr = {'mtype':''};
function SelectMaps() {
// SelectMaps (); global ;
var selector_id = mapping_name + 'select_type';
$( selector_id ).change( function() {
mapping_arr['mtype'] = $( selector_id + ' option:selected' ).val();
return mapping_arr;
});
} SelectMaps ();
$( '#controls' ).html( 'mapping_arr1: ' + JSON.stringify(SelectMaps) );
$( '#controls' ).append( '<br />mapping_arr2: ' + JSON.stringify(mapping_arr) );
})
Необходимо вывести результат выбора из списка. Сам результат позже будет обработан в другом месте. На данном этапе получаемый результат не радует: Код:
mapping_arr1: undefined |
Цитата:
|
Цитата:
|
Ну нет, в РНР такого аналога нет и быть не может.
Ваша функция, это: 1) определить обработчик события onchange спиcку 2) выход Она не ждет когда состояние списка изменится, а объект будет заполнен значением только по изменению в списке. А вот возврат в обработчике в никуда.
var mapping_arr = {'mtype':''};
$('select').change( function() {
mapping_arr.mtype = this.value;
});
//генерировать событие
$('select').trigger('change');
//теперь будет заполнено
alert(JSON.stringify(mapping_arr))
|
Цитата:
по данному примеру: отказался от функции как таковой. проверил на JsFiddle Ваш код, к сожалению он тоже не срабатывает:
$(function() {
var mapping_page = 'mapping';
var mapping_divs = '#' + mapping_page;
var mapping_name = mapping_divs + '_';
var mapping_arr = {'mtype':''};
$('select').change( function() {
mapping_arr.mtype = this.value;
});
//генерировать событие
$('select').trigger('change');
//теперь будет заполнено
$('#controls').html('mapping_arr: ' + JSON.stringify(mapping_arr));
})
, но воз и ныне по прежнему адресу. что не так понять не могу... |
Цитата:
Цитата:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
var mapping_arr = {'mtype':''};
$('select').change( function() {
mapping_arr.mtype = this.value;
}).trigger('change');
alert(JSON.stringify(mapping_arr))
})
</script>
<select id="mapping_select_type">
<option value="2">222</option>
<option value="3">333</option>
</select>
И если так: $('#mapping_select_type'), то тоже будет работать. Что именно не работает? PS. К именам свойств объекта не являющихся числами, можно обращаться так: object_name.proprty_name. А к числовым только так: object_name[proprty_name]. |
Цитата:
|
Цитата:
То что я написал, это генерация события у списка, а значит и запуск обработчика. Но обработчик не изменяет состояние списка, а значит в объект будет помещено значение выбранной по умолчанию опции - первой. А вот когда пользователь сделает выбор, в массив попадет уже значение выбранной им опции. |
Цитата:
|
<div id="controls">***</div>
<select id="mapping_select_type">
<option> Вид карты </ option>
<option value="HYBRID"> • гибридная карта </option>
<option value="ROADMAP"> • дорожная карта </option>
<option value="SATELLITE"> • спутниковая карта </option>
<option value="TERRAIN"> • физическая карта </option>
</select>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
var mapping_page = 'mapping';
var mapping_divs = '#' + mapping_page;
var mapping_name = mapping_divs + '_';
var mapping_arr = {};
$(mapping_name + 'select_type').change( function() {
mapping_arr = {'mtype':''};
$(mapping_name + 'select_type option:selected').each(function() {
mapping_arr.mtype = $(this).val();
});
return mapping_arr;
}).change();
$('#controls').html('mapping_arr: ' + JSON.stringify(mapping_arr));
})
</script>
...введение return также не меняет ситуацию. но если вывод результата находится в пределах обработчика все гуд...
<div id="controls">***</div>
<select id="mapping_select_type">
<option> Вид карты </ option>
<option value="HYBRID"> • гибридная карта </option>
<option value="ROADMAP"> • дорожная карта </option>
<option value="SATELLITE"> • спутниковая карта </option>
<option value="TERRAIN"> • физическая карта </option>
</select>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
var mapping_page = 'mapping';
var mapping_divs = '#' + mapping_page;
var mapping_name = mapping_divs + '_';
var mapping_arr = {};
$(mapping_name + 'select_type').change( function() {
mapping_arr = {'mtype':''};
$(mapping_name + 'select_type option:selected').each(function() {
mapping_arr.mtype = $(this).val();
});
$('#controls').html('mapping_arr: ' + JSON.stringify(mapping_arr));
return mapping_arr;
}).change();
})
</script>
|
| Часовой пояс GMT +3, время: 23:59. |