【问题标题】:Nested IF statement doesn't work like I want it to嵌套的 IF 语句不像我想要的那样工作
【发布时间】:2019-04-19 18:51:12
【问题描述】:
var dayInput = document.querySelector("#day");
var monthInput = document.querySelector("#month");
var yearInput = document.querySelector("#year");
var day = document.querySelector("h2");
var h3 = document.querySelector("h3");

function runCode() {
dayPicked = Number(dayInput.value);
monthPicked = Number(monthInput.value);
yearPicked = Number(yearInput.value);
if (dayPicked <= 31) {
    if (monthPicked <= 12) {
        if ((monthPicked = 2) && (dayPicked <= 29)) {
            day.textContent = (DispDay(dayPicked, monthPicked, yearPicked));
            h3.textContent = (DispFullDate(dayPicked, monthPicked, 
yearPicked));
        } else { day.textContent = "Not Possible Dude!"}
    } else { day.textContent = "Not Possible Dude!"}
} else { day.textContent = "Not Possible Dude!"}
}

这是我的代码中的一个 sn-p,我试图限制在我的输入框中搜索日期。例如,如果选择了 2 月并且这一天是 30 日,它应该会抛出一个错误。但是,您在上面看到的代码所发生的一切,无论我选择哪个月份,它都会一直返回 2 月份。我知道我肯定做错了什么,但我不知道它是什么。顺便说一句 - 我 3 周前开始学习 JavaScript,所以我知道我的代码一团糟。谢谢。

var button = document.querySelector("#goButton");

[dayInput, monthInput, yearInput].forEach(function (element) {element.addEventListener("keyup", function (event) {
event.preventDefault();
if (event.keyCode === 13) {
    runCode();
    }
});

});

我不知道是否需要在此处添加 EventListener,但无论如何都在这里。

【问题讨论】:

  • typo monthPicked = 2 如果你运行 linter,它会捡起这些东西。
  • 旁注:月份在 Date 对象中从零开始,因此 1 月是第 0 个月,而第 12 个月不存在。因此,一旦您从输入创建 Date 对象,逻辑就必须处理它。
  • 常见错误可以通过左侧的常量避免,因此 if(2 = monthPicked) 不能是赋值。 (为了获得更好的代码,请执行一个返回 true 或 false 的 ValidDate 函数。)

标签: javascript if-statement numbers var


【解决方案1】:

你在设置 monthPicked

monthPicked = 2

您的意思是使用两个 == 来检查是否相等。

但是,您将看到的下一个问题是,您的代码仅在用户选择二月时才有效。

你可能想要

if ((monthPicked != 2) || (dayPicked <= 29)) {

这样,如果他们选择 2 月,则必须在 29 日之前。任何其他月份都可以是任何事情。仍然不完整的逻辑,因为某些月份应该允许其他 31 个不允许。但我会把它留给你。 (还有闰年!)

【讨论】:

  • 非常感谢。非常感谢善良的先生!
【解决方案2】:

= 是赋值运算符。 == 是一个等于运算符,比较左侧和侧表达式的值。将 monthPicked = 2 更改为 monthPicked == 2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多