Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проверка значения в input (https://javascript.ru/forum/events/80299-proverka-znacheniya-v-input.html)

farikweb 20.05.2020 06:35

Проверка значения в input
 
Здравствуйте. Помогите разобраться.

Нужно проверить значение в input согласно элементам массива и создать столько условий сколько элементов в массиве.

Есть два массива:
var cities = ["Симферополь", "Симферополь"];
var cities2 = ["Коктебель", "Алушта"];


Вот кусочек кода:
if ((jQuery("#from").val().indexOf("Симферополь") !== -1) && (jQuery("#to").val().indexOf("Коктебель") !== -1)) {
    var curPrice = 2000;
} else if ((jQuery("#to").val().indexOf("Симферополь") !== -1) && (jQuery("#from").val().indexOf("Коктебель") !== -1)) {
    var curPrice = 2000;
} else if ((jQuery("#from").val().indexOf("Симферополь") !== -1) && (jQuery("#to").val().indexOf("Алушта") !== -1)) {
    var curPrice = 1000;
} else if ((jQuery("#to").val().indexOf("Симферополь") !== -1) && (jQuery("#from").val().indexOf("Алушта") !== -1)) {
    var curPrice = 1000;
} else {
    var curPrice = +(jQuery("#price" + jQuery("#class").val()).val()) * Math.floor(length);
}

рони 20.05.2020 07:30

farikweb,
includes

laimas 20.05.2020 08:43

Если Симферополь всегда в условии зачем же это проверять, проверять только Алушта и Коктебель, и достаточно одного условия.

farikweb 20.05.2020 13:21

Цитата:

Сообщение от laimas (Сообщение 524582)
Если Симферополь всегда в условии зачем же это проверять, проверять только Алушта и Коктебель, и достаточно одного условия.

Симферополь не всегда в условии поэтому нужно проверять.
При проверке есть ньюанс, например порядковый номер условии должен совпадать с индексом массива.

laimas 20.05.2020 13:41

Цитата:

Сообщение от farikweb
Симферополь не всегда в условии поэтому нужно проверять.

Для изменения цены по вашим условиям всегда. То есть:

1) Определили цену как сумму двух полей.
2) Получили значения проверяемых полей.
3) Если в полученном есть значение Симферополь, то проверяем второе значение: если оно равно Алушта, то цену определяем равной 2000 и если более нет городов, то иначе 1000. Иначе проверяем и на Коктебель.
4) Иначе цена остается ранее определенной.

let price = 500, //цена по значениям двух полей  
    check = 'Симферополь',
    values = [check, 'b']; //значения проверяемых полей как массив 

if(values.includes(check)){
    values = values.filter(v => v !== check).pop();
    price = values == 'b' ? 2000 : values == 'c' ? 1000 : price;
}

console.log(price);

рони 20.05.2020 14:36

farikweb,
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>

</head>
<body>
<form action="http://" name="form">
<label for="from">from:</label>
<input list="from-city" id="from" name="from" />

<datalist id="from-city">
    <option value="Симферополь">
    <option value="Коктебель">
    <option value="Алушта">
</datalist>
<label for="to">to:</label>
<input list="to-city" id="to" name="to" />

<datalist id="to-city">
    <option value="Симферополь">
    <option value="Коктебель">
    <option value="Алушта">
</datalist>
<output></output>
</form>
<script>
document.addEventListener("DOMContentLoaded", function() {
    let form = document.forms.form;
    let msg = document.querySelector("output");
    const Price = {
  "Симферополь-Коктебель" : 2000,
  "Коктебель-Симферополь" : 2000,
  "Симферополь-Алушта" : 1000,
  "Алушта-Симферополь" : 1000
    };

    const choice = function(event) {
        let from = form.from.value;
        let to = form.to.value;
        let key = `${from}-${to}`;
        let curPrice = key in Price ? Price[key] : 0;
        msg.innerHTML = curPrice;
    }

   form.addEventListener("input", choice)
});


</script>

</body>
</html>

laimas 20.05.2020 14:47

Вау, зачем столько много? :D


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