Как написать проверку значения 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, время: 13:14. |