Javascript 我的函数和调用者有什么问题?带功能的按钮提示
我正在上一堂网络地图课,这项作业真是让我大吃一惊。我对这门课完全陌生,现在才学了三个星期JS之类的东西。因此,任务是有一张地图,上面有三个城市的标记,页面上有一个按钮,当用户点击它时,他们会键入英里或公里。基于该输入,函数应该能够显示基于公里或英里的人口密度(取决于他们输入的内容)。但现在它给了我一个错误信息,单位是未定义的。我给我的教授发了电子邮件,他含糊其辞,基本上说单位和我的单位来电者是“随机”安排的 我只是在赋值的调用方和函数部分中包含代码。地图部分工作正常Javascript 我的函数和调用者有什么问题?带功能的按钮提示,javascript,function,leaflet,Javascript,Function,Leaflet,我正在上一堂网络地图课,这项作业真是让我大吃一惊。我对这门课完全陌生,现在才学了三个星期JS之类的东西。因此,任务是有一张地图,上面有三个城市的标记,页面上有一个按钮,当用户点击它时,他们会键入英里或公里。基于该输入,函数应该能够显示基于公里或英里的人口密度(取决于他们输入的内容)。但现在它给了我一个错误信息,单位是未定义的。我给我的教授发了电子邮件,他含糊其辞,基本上说单位和我的单位来电者是“随机”安排的 我只是在赋值的调用方和函数部分中包含代码。地图部分工作正常 var caller = m
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
}
var caller=mapCities(单位)
var button=document.getElementById(“地图城市”);
addEventListener(“单击”,函数(){
做{
var units=提示符('输入计算密度的单位','输入“英里”或“公里”);
}而(单位=英里和单位=公里);
地图城市(单位);
});
函数映射城市(单位){
var fortWayneDensity=CalcOpDensity(单位:fortWayne.pop、fortWayne.areaMi、fortWayne.areaKm)
var indyDensity=CalcPopDensity(单位:印地·波普、印地·面积米、印地·面积公里)
var southBendDensity=CalcPopDensity(单位:southBend.pop、southBend.areaMi、southBend.areaKm)
//每个城市的密度变量表示一个调用者,该调用者向下发送三条信息-通过MapCities调用者传入的单位以及上面创建的对象的pop和区域
var fortWaynePopup=“”+“韦恩堡”+“
”+
“密度:”+fortWayneDensity.tolocalesting()+“每平方米人数”+单位;
var fortWayneMarker=
L.马克(福特韦恩·库德)
.addTo(地图)
.bindPopup(fortWaynePopup);
var indyPopup=“”+“印第安纳波利斯”+“
”+
“密度:”+indyDensity.tolocalesting()+“每平方米人数”+单位;
var indyMarker=
L.marker(印第库德)
.addTo(地图)
.bindPopup(indyPopup);
var southBendPopup=“”+“南弯”+“
”+
“密度:”+南部弯曲度。toLocaleString()+“每平方米人数”+单位;
var southBendMarker=
L.marker(南本德协调公司)
.addTo(地图)
.bindPopup(南奔普);
}
功能计算密度(单位、pop、面积mi、面积km){
var选择=单位;
如果(单位=公里){
pop/km}
否则{
pop/ARAMI}
返回选择
}
我认为问题在于你试图超越:
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
因为如果使用括号,它将执行函数,这样它将保留对函数的引用。为什么在代码的第一行调用mapCities?一旦有人点击按钮,它就会被调用。我删除了你告诉我要删除的内容,它给了我一个错误,因为km未定义。但我发现,我需要在if-else语句中将km转换为“km”。现在,它起作用了!谢谢,互联网。我发现了另一个问题,我在上一个函数中的返回语句是返回英里或公里,而不是pop密度,我就是这样解决的。。函数CalcPopDensity(units,pop,areami,areakm){var choice=units;if(units='km'){return pop/areakm}else{return pop/areami}