【问题标题】:Do while loop not working with prompt. Javascript执行 while 循环不使用提示。 Javascript
【发布时间】:2017-02-26 15:22:00
【问题描述】:

我正在使用JS Bin网站来写这个。

当我输入错误的(数字)输入时,循环只会触发一次:

function isInputLeapYear()
{
    var year = -1;

    var inputOk = true;

    do{
       year = prompt("Please enter a year to check if it is a leap year \ninput year between 0-9999");

       if(year < 0 || 9999 < year) // check input
       {
         inputOk = false;
         alert("\""+year+"\" is not a good year. \nThe input needs to be between 0-9999");              
       };


    }while(inputOk === false);


  ....
}

【问题讨论】:

  • prompt 函数返回 string,而不是 number。你可以看看parseInt函数。
  • 您需要添加一个else { inputOk = true; },否则您的代码对我来说可以正常工作。
  • @DarinDimitrov 是对的。使用 parseInt 函数。年份 = parseInt(输入) .
  • @DarinDimitrov 它可能会返回一个字符串,但是当字符串与带有&lt; 的数字进行比较时,它们会被强制转换为数字。所以那部分很好。
  • 虽然像@DarinDimitrov 建议的那样明确转换为数字会,但这不是问题。当另一个操作数是数字时,&lt; 会将 year 转换为数字(如上例所示)。

标签: javascript do-while prompt


【解决方案1】:
    function isInputLeapYear()
    {
        var year = -1;

        var inputOk = false;

        do{
           year = prompt("Please enter a year to check if it is a leap year \ninput year between 0-9999");

           if(year > 0 && 9999 > year) // check input
           {
             inputOk = True;



           else
{
alert("\""+year+"\" is not a good year. \nThe input needs to be between 0-9999"); 
}  
           };


        }while(inputOk === false);


      ....
    }

【讨论】:

  • 代码转储不是有用的答案。说出你做了什么,以及为什么。 (并合理地格式化代码。)
  • 另请注意您已更改范围。您不能只是将year &lt; 0 更改为year &gt; 0 来反转该条件。这是year &gt;= 0
【解决方案2】:

将 var inoutOK = true 移动到循环中,这样它会在再次提示之前重置。

function isInputLeapYear()
{
   var year = -1;

   do {
       var inputOk = true;
       year = prompt("Please enter a year to check if it is a leap year \ninput year between 0-9999");

       if(year < 0 || 9999 < year) // check input
       {
          inputOk = false;
          alert("\""+year+"\" is not a good year. \nThe input needs to be between 0-9999");              
       };


    } while(inputOk === false);


  ....
}

【讨论】:

  • 代码转储不是有用的答案。说出您更改的什么,以及为什么
  • @T.J.Crowder 谢谢不知道。我编辑了答案。
猜你喜欢
  • 2021-09-03
  • 1970-01-01
  • 2014-01-21
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多