我试图发出一个提示,用户必须在1到4的范围内输入一个数字(通过do-while循环重新提示,直到输入正确的数字),然后该数字将对应于交换机中的一个情况(这将打开一个新窗口)。在测试中,代码被正确地执行到my语句,其中代码突然“忘记”用户输入的数字,以退出while循环,因此不会为开关中的每一种情况将用户带到代码中。
测试:提示=用户输入5,新提示:无效选择!请输入1到4之间的数字,用户输入4,提示关闭。 有人能明白为什么IF语句中的reDirect变量没有进入开关吗?
我会接受任何建议,但我需要给用户输入超出范围的数字的“自由”,以证明我可以处理错误。
我尝试在if语句中实现新变量,但它们也被排除在关闭的开关之外。
function reDirect() {
var reDirect = 0;
reDirect = parseInt(prompt("Input number between 1 and 4", "1"));
if (reDirect >=5 || reDirect <=0) {
var reDirect = 0
do reDirect = parseInt(prompt("Invalid! Input number between 1 and 4", "1"));
while (reDirect >=5 || reDirect <=0);
}
else
{
var element = document.getElementById("reDirect");
switch (reDirect) {
default:
break;
case 1:
window.open("URL","_blank","height=800px, width=800px");
break;
}
}};
发布于 2019-05-15 06:26:37
听起来,您不希望有条件地运行switch --一旦验证了输入是否有效,您总是希望运行switch。
只需将switch移出else,这样它就可以运行了:
function reDirect() {
var reDirect = 0;
reDirect = parseInt(prompt("Input number between 1 and 4", "1"));
if (reDirect >= 5 || reDirect <= 0) {
do reDirect = parseInt(prompt("Invalid! Input number between 1 and 4", "1"));
while (reDirect >= 5 || reDirect <= 0);
}
var element = document.getElementById("reDirect");
switch (reDirect) {
case 1:
window.open("URL", "_blank", "height=800px, width=800px");
break;
// other cases
default: break; // ???
}
}还请注意,函数声明块的末尾不应该有;,而且由于reDirect是在函数的顶部声明的,所以不应该尝试在if块中使用var重新声明它。(您还可能希望在案例2-4中添加一些案例,或者在default案例中添加更有意义的内容)
发布于 2019-05-15 06:26:57
default出现在switch的末尾
switch (reDirect) {
case 1:
window.open("URL","_blank","height=800px, width=800px");
break;
default:
break;
}发布于 2019-05-15 06:28:08
将默认值放在switch语句的末尾:
function reDirect() {
var reDirect = 0;
reDirect = parseInt(prompt('Input number between 1 and 4', '1'));
if (reDirect >= 5 || reDirect <= 0) {
var reDirect = 0;
do
reDirect = parseInt(prompt('Invalid! Input number between 1 and 4', '1'));
while (reDirect >= 5 || reDirect <= 0);
} else {
var element = document.getElementById('reDirect');
switch (reDirect) {
case 1:
window.open('URL', '_blank', 'height=800px, width=800px');
break;
default:
break;
}
}
}https://stackoverflow.com/questions/56142870
复制相似问题