Функция вызова при выборе определенного выпадающего списка

Я пытаюсь вызвать простую функцию для выбора определенного параметра в раскрывающемся меню.

В этом примере я хочу, чтобы функция выполнялась только при выборе 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>
= / == — Убедитесь, что вы используете правильный оператор сравнения.
Lewis 08.04.2019 15:51

Массивы Javascript отсчитываются от нуля, поэтому вам нужен индекс 3 для четвертого варианта, а = — это оператор присваивания, а не оператор сравнения, поэтому вам нужен if (this.selectedIndex === 3) (или == тоже подойдет).

Cat 08.04.2019 15:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
70
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вам нужна функция, когда запускается событие 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

charlietfl 08.04.2019 15:54

с использованием selectedIndex все в порядке, он был просто отключен на один

Juan Mendes 08.04.2019 15:55

Я бы предложил обрабатывать только вашу функцию.

myPopup(e, id){

  if (id==4)
    //todo
  }
  else{
    //stop the event
    e.stopPropagation();
  }
}

Я рекомендую против этого, нет причин, по которым всплывающая функция нуждается в полном событии, ей следует передавать только необходимую информацию, и она не решает проблему напрямую, не показывает OP, что было не так.

Juan Mendes 08.04.2019 15:56

Почему остановка распространения, не открывая всплывающее окно, не связана с остановкой событий всех родителей

Arthur 08.04.2019 15:56

Да, правда, меня это сейчас зацепило. мы можем добиться этого, остановив вызов функции. onchange = "if (this.value == '3') myPopup();"

Bharat Choudhary 08.04.2019 15:58

Я согласен с @Arthur, но не думаю, что это заслуживает отрицательного голоса.

Andam 08.04.2019 15:58

@ Andam Я не отрицал, но думаю, что это не связано с stopPropagation .. OP, просто отбросьте функцию без примера, аргументы не объясняются, и это никак не помогает.

Arthur 08.04.2019 16:00

Это onchange = "if (this.value == '4') myPopup();" или onchange = "if (this.selectedIndex == 3) myPopup();", но не value == 3

Arthur 08.04.2019 16:01

@ Артур, в следующий раз я постараюсь дать больше объяснений.

Bharat Choudhary 08.04.2019 16:02

@ Артур, я не говорил, что ты проголосовал против этого ответа, извини, если я не понял.

Andam 09.04.2019 08:04

вам нужно проверить индекс, как показано ниже, чтобы проверить, выбран ли 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>

Именно то, что я искал. Спасибо!

Yvan Leclerc 08.04.2019 17:53

Другие вопросы по теме