@ademar26

Почему не работает JS ????

Есть форма
<select name="country" id="country">
  <option value="bra" selected>Бразилия</option>
  <option value="rus">Россия</option>
  <option value="ind">Индия</option>
  <option value="chn">Китай</option>
  <option value="zaf">ЮАР</option>
</select>
<select name="city" id="city">
</select>


Необходимо через событие onchange передавать параметры в функцию при изменении. Сделал вот так но код не работает
var cities = {
 bra: ["Сан-Паулу", "Рио-де-Жанейро"],
  rus: ["Москва", "Санкт-Петербург"],
  ind: ["Мумбаи", "Дели"],
  chn: ["Шанхай", "Пекин"],
  zaf: ["Йоханнесбург", "Кейптаун"]  
   
};

var country = document.getElementById("country");
var city = document.querySelector("#city");

window.onload = selectCountry(city,cities);
country.onchange = selectCountry(city,cities);

function selectCountry(city,ev){
  city.innerHTML = "";
  var c = this.value || "bra", o;
  for(let i = 0; i < ev[c].length; i++){
    o = new Option(ev[c][i],ev[c][i],false,false);
    city.add(o);
  };
}


Код работает если мы в живую прописываем в самой функции
window.onload = selectCountry;
country.onchange = selectCountry;

function selectCountry(){
  city.innerHTML = "";
  var c = this.value || "bra", o;
  for(let i = 0; i < cities[c].length; i++){
    o = new Option(cities[c][i],cities[c][i],false,false);
    city.add(o);
  };
}

Почему так ????
  • Вопрос задан
  • 240 просмотров
Решения вопроса 1
r0n1x
@r0n1x
html, css, js
onchange
var cities = {
      bra: ["Сан-Паулу", "Рио-де-Жанейро"],
      rus: ["Москва", "Санкт-Петербург"],
      ind: ["Мумбаи", "Дели"],
      chn: ["Шанхай", "Пекин"],
      zaf: ["Йоханнесбург", "Кейптаун"]

    };

    var country = document.getElementById("country");
    var city = document.querySelector("#city");

    window.onload = selectCountry(city, cities);
    country.onchange = function() {
      selectCountry(city, cities);
    }

    function selectCountry(city, ev) {
      city.innerHTML = "";
      var c = country.value || "bra",
        o;
      for (let i = 0; i < ev[c].length; i++) {
        o = new Option(ev[c][i], ev[c][i], false, false);
        city.add(o);
      };
    }

link
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы