警告对话框无法关闭。

3
我在Google Chrome版本54.0.2840.100(64位)中运行以下代码。它会连续显示一个提示对话框,直到用户输入正确的答案,但问题是,当我单击提示对话框中的关闭按钮或取消按钮时,它不会关闭,而是继续要求输入。选项卡上的关闭按钮也无法单击。尽管我可以关闭Chrome主窗口,但是否有代码可以纠正这个问题。
var answer = Number(Math.floor(Math.random()*10));

do{
    var number = Number(prompt("Guess a number"));
    if(number-answer >10){
        alert("Too big!!");
    }
    else if(number-answer < 10 && number>answer ){
        alert("It's bigger, but you are close!");
    }
    else if(answer-number < 10 && number<answer){
        alert("It's smaller, but you are close!");
    }
    else if(answer-number > 10){
        alert("Too small!!");
    }
    else if(number==answer){
    alert("You WIN !!");
    break;
    }
}while(number!=answer);

1
你的代码在 do while 循环中,直到显示 "You Win" 弹窗之前它将一直执行。 - Vinod Louis
有一个地方报告说,数字答案>10太大了,另一个地方则太小了。只是想让你知道。 - arame3333
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
2
最简单和直接的答案是删除 do...while 循环。因为这样会一直保持代码运行,直到输入正确答案。 因此,您可以检查输入的数字,如果它为空,则中断它,否则将其转换为您的数字并运行循环。 首先检查 null,这样可以轻松地检查输入的 0。
var answer = Number(Math.floor(Math.random()*10));

do{
    var number = prompt("Guess a number");
    if(number!=null){
        number = Number(number);
    } else {
        break;
    }
    if(number-answer >10){
        alert("Too big!!");
    }
    else if(number-answer < 10 && number>answer ){
        alert("It's bigger, but you are close!");
    }
    else if(answer-number < 10 && number<answer){
        alert("It's smaller, but you are close!");
    }
    else if(answer-number > 10){
        alert("Too small!!");
    }
    else if(number==answer){
    alert("You WIN !!");
    break;
    }
}while(number!=answer);

1
如果点击“取消”,输入值将为“null”,然后“Number(null)”将为“0”。除非猜测的数字是“0”,否则警报对话框不会关闭。在强制转换前最好检查输入值是否为“null”。

Window.prompt()


1
var answer = Number(Math.floor(Math.random()*10));

do{
    var number = Number(prompt("Guess a number"));
    if(number === 0){ // this check is needed
        break;
    }

    if(number-answer >10){
        alert("Too big!!");
    }
    else if(number-answer < 10 && number>answer ){
        alert("It's bigger, but you are close!");
    }
    else if(answer-number < 10 && number<answer){
        alert("It's smaller, but you are close!");
    }
    else if(answer-number > 10){
        alert("Too small!!");
    }
    else if(number==answer){
    alert("You WIN !!");
    break;
    }
}while(number!=answer);
关闭提示框时,返回 null。 将 null 传递给 Number 函数将返回 0。 因此添加了对 0 的检查。 您也可以修改代码,使用户可以输入 0。
var input= prompt("Guess a number");
if(input === null){
  break;
}

var number = Number(input);
    ... rest of the code

0
我已经添加了一行代码来检查用户是否取消了提示框。
var answer = Number(Math.floor(Math.random()*10));

do{
    var number = Number(prompt("Guess a number"));

    // Add the below code to check for null and exit

    if (number === null)break;

    // END

    if(number-answer >10){
        alert("Too big!!");
    }
    else if(number-answer < 10 && number>answer ){
        alert("It's bigger, but you are close!");
    }
    else if(answer-number < 10 && number<answer){
        alert("It's smaller, but you are close!");
    }
    else if(answer-number > 10){
        alert("Too small!!");
    }
    else if(number==answer){
    alert("You WIN !!");
    break;
    }
}while(number!=answer);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,