Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Условие, если значение не найдено (https://javascript.ru/forum/events/49086-uslovie-esli-znachenie-ne-najjdeno.html)

eevr 28.07.2014 21:45

Условие, если значение не найдено
 
Получаю значение из select'a.
var eng = document.getElementById('select_engine').selectedIndex;

Когда значение получено, все понятно. Но как сделать условие, если на странице нет этого select'a?

Проще говоря:
Если значение получено, то ....
Иначе ?

Rise 28.07.2014 21:52

eevr,
var eng = document.getElementById('select_engine');
if (eng) {

} else {

}

eevr 28.07.2014 22:12

Извиняюсь, ввел в заблуждение. Зато понял, почему не сработало.
Добавлю, полный вывод такой:
function engine() {
    var eng = document.getElementById('select_engine').selectedIndex;
    switch (eng) {
        case 0:
            $("#price_item").text("Цена 1");
            break;
        default:
            $("#price_item").text("Цена 2");
    }
}

Срабатывает на onchange="engine();"
Условие такое: если на странице есть select и выбран первый option (value=0), то выводить "Цена 1", иначе "Цена 2",
а если на странице select'a нет, то выводить "Цена 2".

Как это можно грамотнее написать?

Rise 28.07.2014 22:17

eevr,
function engine() {
    var eng = document.getElementById('select_engine');
    if (eng && !eng.selectedIndex) {
        $("#price_item").text("Цена 1");
    } else {
        $("#price_item").text("Цена 2");
    }
}

eevr 28.07.2014 22:25

К сожаление не срабатывает на странице, где select не выводится. Видимо, потому, что не срабатывает событие onchange="engine();".

Vlasenko Fedor 28.07.2014 23:23

eevr,
Приведите используемую HTML разметку, так как не совсем понятно, что вы имеете и как делаете
<select onchange="engine(this)">
  <option value="0">Сделайте свой выбор</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>
<div id="price_item"></div>
<script>
  function engine(el) {
    var price_txt = document.getElementById('price_item');
    var price = ["", "Цена 1", "Цена 2"];
    var sel = el.options[el.options.selectedIndex].value;
    price_txt.innerHTML = price[sel];
  }
</script>

eevr 29.07.2014 00:04

В общем так оно и есть
<select name="options" onchange="engine();" id="select_engine">
            <option>Выбрать</option>
            <option value="25">Паметр 1</option>
            <option value="26">Параметр 2</option>
</select>
<p id="price_item"></p>
<script>
function engine() {
    var eng = document.getElementById('select_engine');
    if (eng && !eng.selectedIndex) {
        $("#price_item").text("Цена 1");
    } else {
        $("#price_item").text("Цена 2");
    }
}
</script>


Дело в том, что одном случае <select> выводится, а другом его вообще нет. Т.е. как я понимаю, события не возникает.
Там, где <select> есть, все правильно работает, а там, где его нет ничего не происходит (в моем понимании, так и должно быть).
Вот и взываю о помощи, как это грамотно решить?

Rise 29.07.2014 01:03

eevr,
function engine(e) {
    if (e && !e.currentTarget.selectedIndex) {
        $("#price_item").text("Цена 1");
    } else {
        $("#price_item").text("Цена 2");
    }
}

BlancoDima 30.07.2014 00:38

Дык просто проверяете есть ли элемент на странице, и если нет, то вызываете свою engine сами.
window.onload = function() {
	if (!document.getElementById('select_engine')) {
		engine();
	};
}

//Если хочется записать короче, то:
window.onload = function() {
	document.getElementById('select_engine') || engine();
}

eevr 30.07.2014 21:23

Большое спасибо за ответы! Разобрался


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