Вызов функций JS в выпадающем списке

#javascript #html #function

#javascript #HTML #функция

Вопрос:

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

    <div class="ex-basic-2">
        <label for="Charts">Sort your Data:</label>

<select name="Charts" id="chartData_Chage" onchange="changeData(this)">
  <option value="1">Top 5 Countries - Heights Cases</option>
  <option value="2">Top 5 Countries - Heights Deaths</option>
  <option value="3">Top 5 Countries - Most Recovered</option>
  <option value="4">All Countries - Cases</option>
</select>
        <div class="container">
            <canvas id="chart" style="height: 400px ; width: 800px;"></canvas>
        </div> <!-- end of container -->
    </div>
  

JS :

 var menu = document.getElementById("chartData_Chage")
menu.addEventListener("onchange", changeData)

function changeData(menu)
{
    if (menu.value == '1')
    {
        createBarChart()
    } 
    else if (menu.value == '2')
    {
        createBarChartMostDeaths()
    }
    else if (menu.value == '3')
    {
        createBarChartMostRecoverys()
    }

}
  

Когда я выбираю выпадающий список, методы работают правильно, но когда я покидаю его и навожу курсор на панель данных чата, данные изменяются (в зависимости от того, кто получает вызов)

Есть идеи, что не так??

Ответ №1:

Вам нужно удалить onchange="changeData(this)" из выбора

Также это change не onchange

Также вы можете использовать this :

 function changeData() { 
   if (this.value == '1') createBarChart(); 
   else if (this.value == '2') createBarChartMostDeaths()
...
  

 const createBarChart = () => {
  console.log("create")
}
const createBarChartMostDeaths = () => {
  console.log("create most deaths")
}
const createBarChartMostRecoverys = () => {
  console.log("create most recoveries")
}


function changeData() {
  if (this.value == '1') {
    createBarChart()
  } else if (this.value == '2') {
    createBarChartMostDeaths()
  } else if (this.value == '3') {
    createBarChartMostRecoverys()
  }
}
window.addEventListener("load",function() {
  const menu = document.getElementById("chartData_Change")
  menu.addEventListener("change", changeData); // "change" not "onchange"
  menu.value=1;
  createBarChart()
})  
 <div class="ex-basic-2">
  <label for="Charts">Sort your Data:</label>

  <select name="Charts" id="chartData_Change">
    <option value="1">Top 5 Countries - Heights Cases</option>
    <option value="2">Top 5 Countries - Heights Deaths</option>
    <option value="3">Top 5 Countries - Most Recovered</option>
    <option value="4">All Countries - Cases</option>
  </select>
  <div class="container">
    <canvas id="chart" style="height: 400px ; width: 800px;"></canvas>
  </div>
  <!-- end of container -->
</div>  

Комментарии:

1. Спасибо, что сработало. Да, только начинаю изучать JS, мой макет кода JS повсюду. Быстрый вопрос, как бы я установил, что значение 1 в выпадающем списке всегда вызывается в начале? @mplungjan

Ответ №2:

вам нужно только установить событие в вашем теге выбора, например

 <select id="sel" onchange='changeData(this)'>
  

вот полный пример : (https://jsfiddle.net/eaxv0o12 /)