Javascript无限循环,但应用程序可以工作吗? var$=函数(id){ 返回文档.getElementById(id); }; var calculateMpg=函数(){ /*var miles=parseFloat($(“miles”).value); var加仑=parseFloat($(“加仑”).值)*/ 做{ var miles=parseFloat($(“miles”).value); var加仑=parseFloat($(“加仑”).值); 如果(伊斯南(英里)和伊斯南(加仑)){ 警报(“两个条目都必须是数字”); $(“英里”).focus() } }而(伊斯南(英里)和伊斯南(加仑));; 做{ var miles=parseFloat($(“miles”).value); var加仑=parseFloat($(“加仑”).值); 如果(英里

Javascript无限循环,但应用程序可以工作吗? var$=函数(id){ 返回文档.getElementById(id); }; var calculateMpg=函数(){ /*var miles=parseFloat($(“miles”).value); var加仑=parseFloat($(“加仑”).值)*/ 做{ var miles=parseFloat($(“miles”).value); var加仑=parseFloat($(“加仑”).值); 如果(伊斯南(英里)和伊斯南(加仑)){ 警报(“两个条目都必须是数字”); $(“英里”).focus() } }而(伊斯南(英里)和伊斯南(加仑));; 做{ var miles=parseFloat($(“miles”).value); var加仑=parseFloat($(“加仑”).值); 如果(英里,javascript,Javascript,我在试着做一个mpg计算器,很明显lol,一切都很好,直到我输入了一个无效的条目…然后我得到了一个无限的错误循环。。。有关于我哪里出错的提示吗?我试图想出一种方法只做一次do-While循环,但我还是得到了infinate循环。在每个Do所在的位置,我都有if-else语句,它们也不起作用,所以我假设这两种方式都是相同的错误 谢谢由于退出条件不能变为真,循环将永远运行,输入无效。英里和加仑不能变成除NaN之外的任何东西。当用户输入发生变化时,它们不会自动更新为新值(有FRP库支持这类功能,但这超

我在试着做一个mpg计算器,很明显lol,一切都很好,直到我输入了一个无效的条目…然后我得到了一个无限的错误循环。。。有关于我哪里出错的提示吗?我试图想出一种方法只做一次do-While循环,但我还是得到了infinate循环。在每个Do所在的位置,我都有if-else语句,它们也不起作用,所以我假设这两种方式都是相同的错误


谢谢

由于退出条件不能变为真,循环将永远运行,输入无效。英里和加仑不能变成除
NaN
之外的任何东西。当用户输入发生变化时,它们不会自动更新为新值(有FRP库支持这类功能,但这超出了问题的范围)。您必须重新轮询DOM,当javascript处于无限循环中时,这显然是不可能发生的。使用
if thens
就像
那样,而
循环将至少运行一次,并且在您的情况下将永远运行。

那么,不要使用循环“等待”用户输入?你不能用JavaScript来实现这一点。那么,如何用另一种方式来实现呢?这是我学习JS/JQuery的第二天,所以我不太远。只是试着做这本书所要求的,不幸的是,哪一个想做的:-/。那么这本书是错的,或者你对这个问题的理解是错的。Bergi是对的,很确定这是本书,哈哈。我在亚马逊上看到人们抱怨这本书。但我明白了。我仍然有不好的结构,还有什么不好的,但我已将其设置为对文档的每个错误使用reset()。@wwe9112:那么这本书要求您做什么?问题是,当用户输入无效的输入并按下
#calculate
按钮时,代码进入无限循环。不要这样做,不要在运行中“等待”,只需显示错误消息,然后让用户再次按下按钮(并运行您的功能)。
 <script>
        var $ = function (id) {
            return document.getElementById(id);
        };


        var calculateMpg = function () {
            /*var miles = parseFloat($("miles").value);

            var gallons = parseFloat($("gallons").value);*/


            do {
                var miles = parseFloat($("miles").value);

                var gallons = parseFloat($("gallons").value);

                if (isNaN(miles) && isNaN(gallons)) {
                    alert("Both entries must be numeric");
                    $("miles").focus()
                }
            } while ((isNaN(miles) && isNaN(gallons)));


            do {
                var miles = parseFloat($("miles").value);

                var gallons = parseFloat($("gallons").value);
                if (miles < 0 && gallons < 0) {
                    alert("Both entries must be greater than 0");
                    $("miles").focus()
                }

            } while ((miles < 0 && gallons < 0));

            do {
                var miles = parseFloat($("miles").value);

                var gallons = parseFloat($("gallons").value);
                if (isNaN(miles)) {
                    alert("Miles must be numeric");
                    $("miles").focus()
                }
            } while ((isNaN(miles)));

            do {
                var miles = parseFloat($("miles").value);

                var gallons = parseFloat($("gallons").value);
                if (isNaN(gallons)) {
                    alert("Gallons must be numeric");
                    $("gallons").focus()

                }
            } while ((isNaN(gallons)));



           do{
               var miles = parseFloat($("miles").value);

               var gallons = parseFloat($("gallons").value);
               if (miles < 0) {
                   alert("Miles must be greater than zero.");
                   $("miles").focus()
               }

           }while((miles < 0));




            var mpg = miles / gallons;
                $("mpg").value = mpg.toFixed(1);

        }

        var clearAll = function () {
            var miles = parseFloat($("miles").value = "");
            var gallons = parseFloat($("gallons").value = "");
            alert("All fields cleared");
            $("miles").focus();
        };


        window.onload = function () {
            $("calculate").onclick = calculateMpg;
            $("miles").focus();
            $("miles").ondblclick = clearAll;
            $("clear").onclick = clearAll;
        }
    </script>