 
			
				10.02.2018, 01:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2015 
					
					
					
						Сообщений: 32
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Не срабатывает возврат значения из функции
			 
			
		
		
		
		
<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
mapping_arr2: {"mtype":""} | 
 
	
 
 
Что сделано не по правилам?  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 05:57
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от WarDoctor
			
		
	 | 
 
	| 
		Не срабатывает возврат значения из функции
	 | 
 
	
 
 А почему, что-о должно сработать, если функция, это установка обработчика объекту? Вы чего ждете?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 09:52
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2015 
					
					
					
						Сообщений: 32
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	| 
		Вы чего ждете?
	 | 
 
	
 
 По аналогии с php ожидаю изменения значения ключа в массиве, в данном случае объекте, чтобы в другом блоке скрипта использовать весь массив для вывода конечного результата.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 10:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Ну нет, в РНР такого аналога нет и быть не может. 
Ваша функция, это:
 
1) определить обработчик события onchange спиcку 
2) выход
 
Она не ждет когда состояние списка изменится, а объект будет заполнен значением только по изменению в списке. А вот возврат в обработчике в никуда.
 
var mapping_arr = {'mtype':''};
$('select').change( function() {
    mapping_arr.mtype = this.value;
});
//генерировать событие
$('select').trigger('change');
//теперь будет заполнено 
alert(JSON.stringify(mapping_arr))
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 10:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2015 
					
					
					
						Сообщений: 32
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	| 
		Ну нет, в РНР такого аналога нет и быть не может.
	 | 
 
	
 
 ...в php подобное реализовывалось путем объявление переменной -> цикл обработки массива с фильтром -> внесение необходимого в соответствующий ключ -> вывод конечного массива на обработку. но php серверный и перегружать страницу после каждого выбора из списка считаю бредом. 
по данному примеру: отказался от функции как таковой. проверил на  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));
})
, но воз и ныне по прежнему адресу. что не так понять не могу...  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось WarDoctor, 10.02.2018 в 10:46.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 10:48
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от WarDoctor
			
		
	 | 
 
	| 
		в php подобное реализовывалось путем объявление переменной -> цикл обработки массива с фильтром -> внесение необходимого в соответствующий ключ -> вывод конечного массива на обработку.
	 | 
 
	
 
 Это по вашему аналогия события, которое может и не наступить?
 
	
 
	| 
		
			Сообщение от WarDoctor
			
		
	 | 
 
	| 
		Ваш код, к сожалению он тоже не срабатывает:
	 | 
 
	
 
 Пусть будет ваш селектор, а не 'select':
 
<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].  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 10.02.2018 в 11:00.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 10:58
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2015 
					
					
					
						Сообщений: 32
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	
		Это по вашему аналогия события, которое может и не наступить? 
 
Пусть будет ваш селектор, а не 'select': 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    var mapping_arr = {'mtype':''};
    var o = $('select').change( function() {
        mapping_arr['mtype'] = this.value;
    });
    o.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'), то тоже будет работать. Что именно не работает?
	 | 
 
	
 
 ...выдаёт значение первого по списку, а надо чтобы в controls выводилось выбранное. controls - проверочное поле...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 11:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от WarDoctor
			
		
	 | 
 
	| 
		...выдаёт значение первого по списку, а надо чтобы в controls выводилось выбранное
	 | 
 
	
 
 А подумать? Кто на момент определения обработчика будет делать в списке выбор? Некому, потому ранее показанный ваш код и ожидает у моря погоды.
 
То что я написал, это генерация события у списка, а значит и запуск обработчика. Но обработчик не изменяет состояние списка, а значит в объект будет помещено значение выбранной по умолчанию опции - первой. А вот когда пользователь сделает выбор, в массив попадет уже значение выбранной им опции.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 10.02.2018 в 11:13.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 11:20
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2015 
					
					
					
						Сообщений: 32
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от laimas
			 
		
	 | 
 
	
		А подумать? Кто на момент определения обработчика будет делать в списке выбор? Некому, потому ранее показанный ваш код и ожидает у моря погоды. 
 
То что я написал, это генерация события у списка, а значит и запуск обработчика. Но обработчик не изменяет состояние списка, а значит в объект будет помещено значение выбранной по умолчанию опции - первой. А вот когда пользователь сделает выбор, в массив попадет уже значение выбранной им опции.
	 | 
 
	
 
 ...в том-то все и дело, что после выбора из списка конечный результат за пределами обработчика не изменяется. необходимо чтобы результат выбора был доступен не только в пределах обработчика...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				10.02.2018, 11:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.01.2015 
					
					
					
						Сообщений: 32
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
<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>
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось WarDoctor, 10.02.2018 в 11:26.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |