javascript - 一次循环 2 个元素

标签 javascript html loops

我正在尝试为表单上的标签创建错误消息。问题是它不起作用。提交的输入必须是数字。只要不是这样,单击按钮就会在特定标签上返回错误消息。

问题是 - 只有当您提交的第一件事是一组正确的数字时,它才可以正常工作。我似乎无法正确组合。你知道我该如何解决这个问题吗?

let coordValues = document.getElementsByClassName("input-card__input");
let submitBtn = document.getElementsByClassName("input-card__button");
let inputLabel = document.getElementsByClassName("input-card__label");

let weatherArray = [];
let labelArray = [];

for(let j=0;j<inputLabel.length;j++) {
  labelArray.push(inputLabel[j].innerHTML);
}

submitBtn[0].addEventListener("click", function checkInputs() {
  for(let i = 0; i<coordValues.length;i++) {
    for(let k = 0; k<inputLabel.length;k++) {
    if(coordValues[i].value === "" || isNaN(Number(coordValues[i].value))) {
      inputLabel[k].classList.add("input-card__label--error");
      inputLabel[k].innerHTML = "Oops! Write a number here."
      console.log("nop");
      break;
    } else {
      inputLabel[k].classList.remove("input-card__label--error");
      inputLabel[k].innerHTML = labelArray[k];
      console.log("yep");
      break;
    }
  }
}
});
.input-card__label--error {
    color: red;
}
<head>
</head>
<body>
    <div class="input-card">
        <h1 class="input-card__title">Where are you?</h1>
        <h3 class="input-card__label">LONGITUDE</h3>
        <input type="text" placeholder="Longitude" class="input-card__input">
        <h3 class="input-card__label">ALTITUDE</h3>
        <input type="text" placeholder="Altitude" class="input-card__input">
        <button class="input-card__button">Show me weather ⛅</button>
    </div>
</body>

最佳答案

您的代码中有一些错误,这是我修改的版本:

submitBtn[0].addEventListener("click", function checkInputs() {
  for(let i = 0; i<coordValues.length;i++) {
    if(coordValues[i].value === "" || isNaN(Number(coordValues[i].value))) {
      inputLabel[i].classList.add("input-card__label--error");
      inputLabel[i].innerHTML = "Oops! Write a number here."
      console.log("nop");
      return;
    }
    inputLabel[i].classList.remove("input-card__label--error");
    inputLabel[i].innerHTML = labelArray[i];
  }

  console.log("yep");  
});

一个问题是双重 for 循环,它使您想要做的事情变得过于复杂。 然后,一旦删除,您的代码就会留下一个 for 循环,然后是一个测试,所有这些都以中断结束,因此您永远不会进行超过一次的迭代。

上面的代码基本上说的是记录 yes,除非你找到记录 nop 的理由。

关于javascript - 一次循环 2 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49712435/

相关文章:

javascript - 如何在 Google Chrome 扩展程序中使用 Facebook Graph API?

javascript - 出现 AngularJS Ui-grid 错误

javascript - 如何获得 Camunda 进程的平均持续时间?

javascript - 使用 Modernizr 检测 Internet Explorer 版本

html - 无法加载资源: the server responded with a status of 404 (Not Found) issue in Nodejs app

C# 错误 : Use of unassigned local variable

html - Bootstrap 4 水平文本对齐在 <span> 中不起作用

javascript - 如何计算数字和逗号中有空格的表中的值

c - 遍历文件中的行并与上一行进行比较

javascript - 如何正确退出 JavaScript 中的循环并防止其进一步迭代?