Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не срабатывает возврат значения из функции (https://javascript.ru/forum/jquery/72580-ne-srabatyvaet-vozvrat-znacheniya-iz-funkcii.html)

laimas 10.02.2018 11:23

Цитата:

Сообщение от WarDoctor
необходимо чтобы результат выбора был доступен не только в пределах обработчика...

Так зачем тогда глобальный объект mapping_arr, выполняйте все необходимые действия в обработчике. И триггер тоже не нужен, а alert(JSON.stringify(mapping_arr)) без наступления события и должен в этом случае возвращать свойство без значения.

laimas 10.02.2018 11:28

Цитата:

Сообщение от WarDoctor
введение return также не меняет ситуации...

Некому return, это понятно? А $(mapping_name + 'select_type').change( function() и $('#controls').html('mapping_arr: ' + JSON.stringify(mapping_arr));
события асинхронные.

$('select').change( function() {
$('#controls').html(тут вставляем нужное, получая значение выбранной опции как this.value, напрягать JQ по таким пустякам не стоит.)

WarDoctor 10.02.2018 11:39

Цитата:

Сообщение от laimas (Сообщение 477511)
Некому return, это понятно?

...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();
      });
      return mapping_arr;
  }).change();
	
  $('#controls').html('mapping_arr: ' + JSON.stringify(mapping_arr));

})
</script>

laimas 10.02.2018 11:51

$(...).change( function() {
mapping_arr.mtype = this.value;
имя_функции_какого_то_основ ного_скрипта();
})

WarDoctor 10.02.2018 11:57

Цитата:

Сообщение от laimas (Сообщение 477515)
$(...).change( function() {
mapping_arr.mtype = this.value;
имя_функции_какого_то_основ ного_скрипта();
})

...тоже пришел к такому же решению - передать результат обработки в промежуточную функцию:
<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 map_arr = {};
  $(mapping_name + 'select_type').change( function() {
      map_arr = {'mtype':''};
      $(mapping_name + 'select_type option:selected').each(function() {
      	map_arr = $(this).val();
      });
      SelectMap (map_arr);
  }).change();
	
  function SelectMap(MapArr) {
		// SelectMaps (MapArr);
	  var mapping_arr = {};
    mapping_arr.mtype = MapArr;
		$('#controls').html('mapping_arr: ' + JSON.stringify(mapping_arr));
	}
})
</script>

WarDoctor 10.02.2018 12:04

...похоже что для наполнения массива необходимыми значениями, а их у меня по условиям работы скрипта может быть несколько, необходимо каждое значение передать в эту функцию и там уже причесать к результирующему выводу.
правильно? jsfiddle.net...

laimas 10.02.2018 12:10

Цитата:

Сообщение от WarDoctor
правильно?

Нет не правильно. Подумайте, что в обработчике нелогично?

WarDoctor 10.02.2018 12:16

Цитата:

Сообщение от laimas (Сообщение 477518)
Нет не правильно. Подумайте, что в обработчике нелогично?

...похоже, что надо вот так: jsfiddle.net - ведь будут различные переменные добавляться...

laimas 10.02.2018 12:26

Цитата:

Сообщение от WarDoctor
похоже, что надо вот так

Так вообще не надо.

$(mapping_name + 'select_type').change( function() {
.....
$(mapping_name + 'select_type option:selected').each(function() {

это расточительство, когда в обработчике список уже доступен - this.

Значением списка при этом является значение его выбранной опции, то есть this.value - $(this).val() при этом это еще одно расточительство.

В списке с единственным выбором выбранная опция может быть только одна. Попробуйте исходя из этой аксиомы объяснить, что тут происходит?

$(mapping_name + 'select_type option:selected').each(function() {

WarDoctor 10.02.2018 12:31

Цитата:

Сообщение от laimas (Сообщение 477520)
$(mapping_name + 'select_type option:selected').each(function() {

...это обход всех возможных значений списка. тут Вы правы - излишества тупицы. мой косяк.
добавив еще один список и его обработчик в конечную функцию приходит только крайний вариант выбора, а вот как заставить накапливать все значения, пока не дотумкал...


Часовой пояс GMT +3, время: 23:37.