Я пытаюсь вызвать простую функцию для выбора определенного параметра в раскрывающемся меню.
В этом примере я хочу, чтобы функция выполнялась только при выборе 4-го варианта.
<select onchange = "if (this.selectedIndex = 4) mypopup();">
<option value = "1">P1</option>
<option value = "2">P2</option>
<option selected = "selected" value = "3">P3</option>
<option value = "4">P4</option>
</select>
Массивы Javascript отсчитываются от нуля, поэтому вам нужен индекс 3 для четвертого варианта, а =
— это оператор присваивания, а не оператор сравнения, поэтому вам нужен if (this.selectedIndex === 3)
(или ==
тоже подойдет).
Вам нужна функция, когда запускается событие onchange, и вам нужно проверить, какая опция выбрана, а затем вы можете просто запустить другую функцию.
function selectChange(ev){
const value = ev.target.value;
if (value === 3){
myPopup(); // call your function
}
}
<select onchange = "selectChange(event)">
<option value = "1">P1</option>
<option value = "2">P2</option>
<option value = "3">P3</option>
<option value = "4">P4</option>
</select>
Это очень просто.
Сначала вам нужно использовать this.value
вместо this.selectedIndex
.
Во-вторых, вы должны использовать ==
для проверки равенства, а не =
для установки нового значения.
let mypopup = function() {
alert("Popup")
}
<select onchange = "if (this.value == 4) mypopup();">
<option value = "1">P1</option>
<option value = "2">P2</option>
<option selected = "selected" value = "3">P3</option>
<option value = "4">P4</option>
</select>
Такой логике не место в html. это 2019 а не 1999
с использованием selectedIndex все в порядке, он был просто отключен на один
Я бы предложил обрабатывать только вашу функцию.
myPopup(e, id){
if (id==4)
//todo
}
else{
//stop the event
e.stopPropagation();
}
}
Я рекомендую против этого, нет причин, по которым всплывающая функция нуждается в полном событии, ей следует передавать только необходимую информацию, и она не решает проблему напрямую, не показывает OP, что было не так.
Почему остановка распространения, не открывая всплывающее окно, не связана с остановкой событий всех родителей
Да, правда, меня это сейчас зацепило. мы можем добиться этого, остановив вызов функции. onchange = "if (this.value == '3') myPopup();"
Я согласен с @Arthur, но не думаю, что это заслуживает отрицательного голоса.
@ Andam Я не отрицал, но думаю, что это не связано с stopPropagation .. OP, просто отбросьте функцию без примера, аргументы не объясняются, и это никак не помогает.
Это onchange = "if (this.value == '4') myPopup();"
или onchange = "if (this.selectedIndex == 3) myPopup();"
, но не value == 3
@ Артур, в следующий раз я постараюсь дать больше объяснений.
@ Артур, я не говорил, что ты проголосовал против этого ответа, извини, если я не понял.
вам нужно проверить индекс, как показано ниже, чтобы проверить, выбран ли 4-й вариант.
<select onchange = "if (this.selectedIndex == 3){ mypopup();}">
<option value = "1">P1</option>
<option value = "2">P2</option>
<option selected = "selected" value = "3">P3</option>
<option value = "4">P4</option>
</select>
Именно то, что я искал. Спасибо!
=
/==
— Убедитесь, что вы используете правильный оператор сравнения.