【问题标题】:If Statement Condition Error In JavascriptJavascript中的If语句条件错误
【发布时间】:2022-01-15 08:56:33
【问题描述】:

我正在创建一个网站,您可以在其中输入您出生时的信息,代码会输出您的年龄(以天为单位)。我通过使用“if”语句来实现这一点。我创建了一个用于检测无效输入的系统。它会正确检测到无效输入,但也会将有效输入检测为无效。我希望有人可以帮我解决这个问题。这是JS代码。

function ageInDays() {
  // variables
  var birthYear  = prompt("What Year Were You Born In?");
  var ageInDayss = (2021 - birthYear) * 365;

  //text
  if (birthYear > 1990 && birthYear < 2021) {
    var h1         = document.createElement('h1');
    var textAnswer = document.createTextNode("You are " + ageInDayss + " days old.");
    h1.setAttribute('id', 'ageInDays');
    h1.appendChild(textAnswer);
    document.getElementById('flex-box-result').appendChild(h1);
  }

  if (birthYear < 1920 || birthYear != 'NaN' || birthYear > 2021) {
    var h1         = document.createElement('h1');
    var textAnswer = document.createTextNode("Invalid Input. Please Try Again.");
    h1.setAttribute('id', 'ageInDays');
    h1.appendChild(textAnswer);
    document.getElementById('flex-box-result').appendChild(h1);
  }

  if (birthYear > 1920 && birthYear < 1990) {
    var h1         = document.createElement('span');
    var h2         = document.createElement('span');
    var textAnswer = document.createTextNode("You are " + ageInDayss + " days old.");
    var textAnswer1 = document.createTextNode(" Yikes... that's old.");
    h1.setAttribute('id', 'ageInDays');
    h2.setAttribute('id', 'yikes');
    h1.appendChild(textAnswer);
    h2.appendChild(textAnswer1);
    document.getElementById('flex-box-result').appendChild(h1).appendChild(h2);
  }
}

如果您运行此代码,您可以看到如果您输入了一个有效的输入(1920 年到 2021 年之间),它会检测到该输入是无效的。请帮我解决这个问题。

【问题讨论】:

  • 您可能想在第一个条件之后的每个条件处添加 else ifs?否则即使第一个if条件为真,其余代码仍在执行中
  • if (birthYear&lt;1920 || birthYear!= 'NaN' || birthYear&gt;2021) - birthYear 的值几乎永远不会是 'NaN',所以这个条件几乎总是成立。
  • 仅供参考,您忽略了考虑出生于 1920、1990 和 2021 年的人,因为 > 和
  • 是的。待输出系统正常工作后,我会这样做。
  • 我为你做了一个js fiddle。如您所见,输入没有问题。这与你如何显示它有关。

标签: javascript if-statement output


【解决方案1】:

将其包装在“if”中以首先验证输入

 // Age In Days
function ageInDays() {
    // variables
    var birthYear = prompt("What Year Were You Born In?");
    //var ageInDayss = (2021 - birthYear) * 365;
    const bDate  = new Date(birthYear + "-01-01");
    const today = new Date();
    const diffTime = Math.abs(bDate - today);
        const ageInDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); 
    // variable css

    //text
if (isNaN(birthYear) == false) {

    
    if (birthYear=>1990 && birthYear<=2021) {
        var h1 = document.createElement('h1');
        var textAnswer = document.createTextNode("You are " + ageInDays + " days old.");
        h1.setAttribute('id', 'ageInDays');
        h1.appendChild(textAnswer);
        document.getElementById('flex-box-result').appendChild(h1);

    } 


    if (birthYear<1990) {
        var h1 = document.createElement('span');
        var h2 = document.createElement('span');
        var textAnswer = document.createTextNode("You are " + ageInDays + " days old.");
        var textAnswer1 = document.createTextNode(" Yikes... that's old.");
        h1.setAttribute('id', 'ageInDays');
        h2.setAttribute('id', 'yikes');
        h1.appendChild(textAnswer);
        h2.appendChild(textAnswer1);
        document.getElementById('flex-box-result').appendChild(h1).appendChild(h2);
    }

 }else{
                var h1 = document.createElement('h1');
        var textAnswer = document.createTextNode("Invalid Input. Please Try Again.");
        h1.setAttribute('id', 'ageInDays');
        h1.appendChild(textAnswer);
        document.getElementById('flex-box-result').appendChild(h1);
 }
}

【讨论】:

  • 没问题。仅供参考,我对当前日期进行了编辑,假设此人的生日是 1 月 1 日。在这里看小提琴:jsfiddle.net/xjyrd51f/2
【解决方案2】:

好吧,您的代码按照您的要求执行。您正在检查出生年份是否不是 nan ,显然不是。你的 if 语句应该是这样的。

if (birthYear < 1990 || birthYear > 2021 || birthYear == "NaN")

【讨论】:

  • 我改变了它,它大部分都在工作。当我输入“字符串”时,它不会输出任何内容。
  • 要解决这个问题,您只需将这段代码放在函数birthYear = parseInt(birthYear)的开头
  • 我放了它,但它仍然没有解决问题。我做了一个 js fiddle,所以你可以帮助我理解更多。这是链接:jsfiddle.net/7zfaj2Le/2
  • 据我所知它有效。
  • 输出有效,但如果你在输入框中输入字母,你不会得到无效的输出消息。
猜你喜欢
  • 1970-01-01
  • 2020-09-29
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多