我想制作一个随机数事实应用程序,该程序由输入数字触发。该应用程序运行良好,但是我希望能够选择年份事实或数学事实,但是即使我选择年份/数学,它也只能显示数字事实。我使用的API允许我使用该格式(例如http://numbersapi.com/2001/year)。另外,我在JSlint中没有错误。
let fact = document.querySelector("#fact");
let factText = document.querySelector("#factText");
let numberInput = document.querySelector("#numberInput");
let selecter = document.querySelector("#numberSelect");
numberInput.addEventListener("input", getFactAjax);
function getFactAjax() {
let xhr = new XMLHttpRequest();
let number = numberInput.value;
let numberType = "";
switch(selecter.value){
case 1:
numberType = "";
break;
case 2:
numberType = "/year";
break;
case 3:
numberType = "/math";
}
xhr.open("GET", "http://numbersapi.com/"+ number + numberType);
xhr.onload = function() {
if(this.status == 200 && number != ""){
fact.style.display = "block";
factText.innerHTML = this.responseText;
}
};
xhr.send();
};
答案 0 :(得分:3)
input.value
返回一个字符串。使用严格相等运算符===
完成的比较将返回false
进行字符串/整数比较。 switch语句使用严格的相等性。因此,当在案例中使用数字时,直接给switch语句从input.value
返回的字符串时,没有任何案例将与给定的字符串匹配,并且整个事情基本上不起作用。一种简单的解决方案是在这种情况下使用字符串,例如case "1":
,而不是case 1:
。 “适当”的解决方案是先将字符串转换为数字,例如通过使用parseInt
。