01.02.2016, 10:28
|
Интересующийся
|
|
Регистрация: 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.
|
|
01.02.2016, 10:36
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
angelzzz,
в каком формате должен быть результат?
|
|
01.02.2016, 10:48
|
Интересующийся
|
|
Регистрация: 20.12.2011
Сообщений: 29
|
|
Логика такая: Если значение select равно значению key массива arr, то Xval равно значению val соответствующему этому key, а значение Xval2 равно значение val2 соответствующему этому key.
То есть мне нужно получить val и val2 чтобы затем их использовать в вычилсениях
|
|
01.02.2016, 10:48
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
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>
|
|
01.02.2016, 10:52
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
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>
|
|
01.02.2016, 11:46
|
Интересующийся
|
|
Регистрация: 20.12.2011
Сообщений: 29
|
|
Значит формат 2 переменные. Спасибо!
Попробую
|
|
01.02.2016, 22:44
|
Интересующийся
|
|
Регистрация: 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)
|
|
01.02.2016, 23:07
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от angelzzz
|
var s = obj[this.value];
|
строка 12 нет у вас никакого this.value
var s = obj[1];
|
|
02.02.2016, 09:34
|
Интересующийся
|
|
Регистрация: 20.12.2011
Сообщений: 29
|
|
Выдает ошибку
Uncaught TypeError: Cannot read property '0' of undefined
на строке a = s[0];
|
|
02.02.2016, 12:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от 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)
|
|
|
|