Не срабатывает возврат значения из функции
<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, время: 20:20. |