Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.02.2016, 10:28
Интересующийся
Отправить личное сообщение для angelzzz Посмотреть профиль Найти все сообщения от angelzzz
 
Регистрация: 20.12.2011
Сообщений: 29

Как написать проверку значения select с массивом?
Добрый день!

Только начал изучение js/jquery (если честно, не всегда понимаю где что), а программировал в последний раз лет 15 назад на бейсике в школе.

Есть значения в теге select:

<select id="myselect">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>


Есть ассоциативный массив в js

var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
],

Получаю значение

$( "#myselect option:selected" ).text();


Как получить значения val и val2 если если значение key совпадает со значением select и сохранить это в переменную?

Последний раз редактировалось angelzzz, 01.02.2016 в 10:30.
Ответить с цитированием
  #2 (permalink)  
Старый 01.02.2016, 10:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

angelzzz,
в каком формате должен быть результат?
Ответить с цитированием
  #3 (permalink)  
Старый 01.02.2016, 10:48
Интересующийся
Отправить личное сообщение для angelzzz Посмотреть профиль Найти все сообщения от angelzzz
 
Регистрация: 20.12.2011
Сообщений: 29

Логика такая: Если значение select равно значению key массива arr, то Xval равно значению val соответствующему этому key, а значение Xval2 равно значение val2 соответствующему этому key.

То есть мне нужно получить val и val2 чтобы затем их использовать в вычилсениях
Ответить с цитированием
  #4 (permalink)  
Старый 01.02.2016, 10:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

angelzzz,
формат это то что в s
в переменной s находится массив из двух элементов с нужными значениями
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <script>
   $(function(){
var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
], obj = {}, s;
Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});

$("#myselect").on("change", function() {
  s = obj[this.value];
  $("p").html(s.join(" - "))
}).change()

   })
  </script>
</head>

<body>
<p></p>
<select id="myselect" >
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>

</body>

</html>
Ответить с цитированием
  #5 (permalink)  
Старый 01.02.2016, 10:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

angelzzz,
или такой формат результата - здесь переменные a и b
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
  <script>
   $(function(){
var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
], obj = {}, a,b;
Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});

$("#myselect").on("change", function() {
  var s = obj[this.value];
  a = s[0];
  b = s[1];
  $("p").html(a+ " - " + b)
}).change()

   })
  </script>
</head>

<body>
<p></p>
<select id="myselect" >
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>

</body>

</html>
Ответить с цитированием
  #6 (permalink)  
Старый 01.02.2016, 11:46
Интересующийся
Отправить личное сообщение для angelzzz Посмотреть профиль Найти все сообщения от angelzzz
 
Регистрация: 20.12.2011
Сообщений: 29

Значит формат 2 переменные. Спасибо!

Попробую
Ответить с цитированием
  #7 (permalink)  
Старый 01.02.2016, 22:44
Интересующийся
Отправить личное сообщение для angelzzz Посмотреть профиль Найти все сообщения от angelzzz
 
Регистрация: 20.12.2011
Сообщений: 29

Можете объяснить эту конструкцию:

$(function(){
var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
],


Этой просто объявляется массив, тут понятно

obj = {}, a,b;


Это специально идет через обычную запятую? что делает эта част? просто присваивается в переменную obj массив и два значения?

Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});


Это видимо перебор? Тут идет сравнение со значением из select?

$("#myselect").on("change", function() {
  var s = obj[this.value];
  a = s[0];
  b = s[1];
  $("p").html(a+ " - " + b)
}).change()


Вот эта часть у меня выдает ошибку, видимо потому что это и так находится все в функции изменения которой стоят на on.change. Вот так выдает ошибку

var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
], obj = {}, a,b;
Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});
 
  var s = obj[this.value];
  a = s[0];
  b = s[1];
  $("p").html(a+ " - " + b)
Ответить с цитированием
  #8 (permalink)  
Старый 01.02.2016, 23:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от angelzzz
var s = obj[this.value];
строка 12 нет у вас никакого this.value
var s = obj[1];
Ответить с цитированием
  #9 (permalink)  
Старый 02.02.2016, 09:34
Интересующийся
Отправить личное сообщение для angelzzz Посмотреть профиль Найти все сообщения от angelzzz
 
Регистрация: 20.12.2011
Сообщений: 29

Выдает ошибку
Uncaught TypeError: Cannot read property '0' of undefined
на строке a = s[0];
Ответить с цитированием
  #10 (permalink)  
Старый 02.02.2016, 12:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от angelzzz
на строке a = s[0];

var arr = [
{key:1, val:123, val2:1},
{key:2, val:223, val2:2},
{key:3, val:323, val2:2},
{key:4, val:423, val2:1}
], obj = {}, a,b;
Object.keys(arr).forEach(function (a) {
  var el = arr[a];
  obj[el.key] = [el.val,el.val2];
});

  var s = obj[1];
  a = s[0];
  b = s[1];
 alert(a+ " - " + b)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать 2 значения в скрипт? useruser jQuery 1 07.10.2014 11:32
Как удалить объекты select D_Sergeevich Элементы интерфейса 3 16.09.2014 21:13
Как правильно прописать полученные значения с сервера? Dimaz jQuery 0 07.12.2012 19:46
Как лучше написать скрипт теста Dimaz jQuery 2 28.11.2012 16:08
Как получить значения вышестоящих элементов дерева TreeStore ? Allan Stark ExtJS 1 31.07.2012 16:48