Как написать проверку значения 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,
в каком формате должен быть результат? |
Логика такая: Если значение select равно значению key массива arr, то Xval равно значению val соответствующему этому key, а значение Xval2 равно значение val2 соответствующему этому key.
То есть мне нужно получить val и val2 чтобы затем их использовать в вычилсениях |
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> |
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> |
Значит формат 2 переменные. Спасибо!
Попробую |
Можете объяснить эту конструкцию:
$(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) |
Цитата:
var s = obj[1]; |
Выдает ошибку
Uncaught TypeError: Cannot read property '0' of undefined на строке 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) |
Часовой пояс GMT +3, время: 18:17. |