Что не так с моей функцией и звонящими? Кнопка подсказки с функциями - PullRequest
0 голосов
/ 10 февраля 2020

Я нахожусь в классе для веб-картографии, и это задание действительно пинает меня в задницу. Я совершенно новичок в этом и изучаю только JS и такое уже три недели. Таким образом, задача состоит в том, чтобы иметь карту с маркерами для трех городов и кнопку на странице, чтобы, когда пользователь нажимает на нее, они вводили мили или километры. И на основе этого ввода функция должна иметь возможность отображать плотность населения на основе км или миль (зависит от того, что они набрали). Но сейчас он дает мне сообщение об ошибке, что единицы не определены. Я написал своему профессору по электронной почте, и он был расплывчатым, и в основном сказал, что юниты и вызывающий их юнит были размещены «случайно».

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

var caller = mapCities(units)  

var button = document.getElementById("map-cities"); 
   button.addEventListener("click", function() {

       do {
           var units = prompt('Enter the units for calculating density', 'Enter "miles" or "km"');
       } while (units != "miles" && units != "km");

       mapCities(units);

  });



  function mapCities(units) { 

      var fortWayneDensity = CalcPopDensity(units, fortWayne.pop, fortWayne.areaMi, fortWayne.areaKm)
      var indyDensity = CalcPopDensity(units, indy.pop, indy.areaMi, indy.areaKm)
      var southBendDensity = CalcPopDensity(units, southBend.pop, southBend.areaMi, southBend.areaKm)
      // A density variable for each city representes a caller which sends down three pieces of information - units that was passed in through the MapCities caller and the pop and area from the objects you created above


      var fortWaynePopup = "<b>" + "Fort Wayne" + "</b><br>" +
              "<b>Density</b>: "+fortWayneDensity.toLocaleString()+" people per square " + units;
           var fortWayneMarker =
               L.marker(fortWayne.coord)
              .addTo(map)
              .bindPopup(fortWaynePopup);

      var indyPopup = "<b>" + "Indianapolis" + "</b><br>" +
              "<b>Density</b>: "+indyDensity.toLocaleString()+" people per square " + units;
           var indyMarker =
               L.marker(indy.coord)
              .addTo(map)
              .bindPopup(indyPopup);

      var southBendPopup = "<b>" + "South Bend" + "</b><br>" +
              "<b>Density</b>: "+southBendDensity.toLocaleString()+" people per square " + units;
           var southBendMarker =
               L.marker(southBend.coord)
              .addTo(map)
              .bindPopup(southBendPopup);


  }


   function CalcPopDensity (units, pop, areami, areakm){
       var choice = units;
       if (units = km) {
           pop/areakm}
       else {
           pop/areami}
       return choice
   }

1 Ответ

0 голосов
/ 10 февраля 2020

Я думаю, что проблема в том, что вы пытаетесь выполнить команду:

var caller = mapCities(units)

, но вы объявили единицы позже:

var units = prompt('Enter the units for calculating density', 'Enter "miles" or "km"');

Это должно сработать, если вы удалите свою первую строку код, так как вы уже выполняете функцию mapCities внутри прослушивателя событий.

button.addEventListener("click", function() {

   do {
       var units = prompt('Enter the units for calculating density', 'Enter "miles" or "km"');
   } while (units != "miles" && units != "km");

   mapCities(units);

});

, если вы действительно хотите сохранить ссылку на mapCities в переменной вызывающего, вы должны сделайте это следующим образом:

var caller = mapCities

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...