JavaScript跳过document.write转到window.prompt?

问题描述 投票:1回答:2

这段代码假设在window.prompt()和document.write()之间来回转换,但是它会遍历所有window.prompt()消息并迭代,只要它必须,然后它转储所有文档.write输出在while循环的出口处。可以做些什么来回走动?

<!DOCTYPE HTML>
    <html>
    <head>
        <meta charset="utf-8">
        <title>gasMilage</title>
        <script type = "text/javascript">

            var gasNow;
            var distanceNow;
            var mpgNow;
            var gasOverall;
            var distanceOverall;
            var mpgOverall;
            var answer;

            answer = "yes";

            gasOverall = parseInt(0);
            distanceOverall = parseInt(0);

            while(answer == "yes"){

            gasNow = window.prompt(
            "Enter the gallons of gas used: ")
            gasNow = parseInt(gasNow);

            distanceNow = window.prompt(
            "Enter the distance traveled in miles: ")
            distanceNow = parseInt(distanceNow);

            mpgNow = parseInt(distanceNow / gasNow);

            document.writeln(
            "Your current mpg is " + mpgNow + "<br />");

            gasOverall = gasNow + gasOverall;
            distanceOverall = distanceNow + distanceOverall;
            mpgOverall = parseInt(distanceOverall/gasOverall);

            document.writeln(
            "Your overall mpg is " + mpgOverall + "<br />");

            answer = window.prompt(
            "If you want to add more values, type yes.")
            }

        </script>    
    </head>
    <body>
    </body>
</html>
javascript document.write
2个回答
1
投票

是的,这是因为提示进入得太快而且DOM没有时间写,因为有一个待处理的提示请求正在进行。解决这个问题的方法是在你的提示方法上加上超时。

但是,由于你在这里做了一个while循环,它将再次执行第一个提示而不等待超时。因此,不是while循环,只需将其包装在函数中,如果最后一个提示为是,则递归调用它。

试试这个fiddle

(function query() {
    gasNow = window.prompt(
    "Enter the gallons of gas used: ")
    gasNow = parseInt(gasNow);

    distanceNow = window.prompt(
    "Enter the distance traveled in miles: ")
    distanceNow = parseInt(distanceNow);

    mpgNow = parseInt(distanceNow / gasNow);

    document.writeln(
    "Your current mpg is " + mpgNow + "<br />");

    gasOverall = gasNow + gasOverall;
    distanceOverall = distanceNow + distanceOverall;
    mpgOverall = parseInt(distanceOverall/gasOverall);

    document.writeln(
    "Your overall mpg is " + mpgOverall + "<br />");

    setTimeout(() => {
        answer = window.prompt(
        "If you want to add more values, type yes.")
        if(answer === 'yes') query();
    }, 1);

})()

0
投票

在每个document.write之后,您可以添加延迟。这将为文档提供渲染时间。

© www.soinside.com 2019 - 2024. All rights reserved.