javascript - 如果在此代码中输入为空,如何添加?

标签 javascript html for-loop if-statement input

如果输入为空,我对如何添加此代码以发出警报有点困惑。我会在第一个中添加另一个功能吗?任何提示将不胜感激!

function getCandidateNames() {
    var inputs = document.getElementsByTagName("input");
    var result = [];
    for (var i = 0; i < inputs.length; i += 1) {
        if (inputs[i].getElementsByTagName("candidate")) {
            result.push(inputs[i].value);
        }
    }
    return result;
}

function putCandidateNames(names) {
    document.getElementById("candidateName1").innerHTML = names[0];
    document.getElementById("candidateName2").innerHTML = names[1];
    document.getElementById("candidateName3").innerHTML = names[2];
}

function candidateNames() {
    putCandidateNames(getCandidateNames());
}

HTML

<fieldset id="candidates">
    <legend>Candidates</legend>
    <div>
        <label for="cand1">Candidate 1</label>
        <input class="candidate" id="cand1" placeholder="Candidate">
    </div>
    <div>
        <label for="cand2">Candidate 2</label>
        <input class="candidate" id="candName" placeholder="Candidate">
    </div>
    <div>
        <label for="cand3">Candidate 3</label>
        <input class="candidate" id="candName" placeholder="Candidate">
    </div>
</fieldset>

最佳答案

您的代码中有很多问题需要修复:

  • 您不能对页面中的多个元素使用相同的 id id="candName"
  • 这段代码 inputs[i].getElementsByTagName("candidate") 在这里完全错误你应该使用 getElementsByClassName("candidate") 代替,因为你不有 candidate 标签,您将它们用作类。
  • 而不是获取 inputs nodeList 然后使用 inputs[i].getElementsByTagName("candidate") 对其进行迭代,您可以只使用 document.getElementsByClassName (“候选人”)

你的代码应该是这样的:

function getCandidateNames() {
  var inputs = document.getElementsByClassName("candidate");
  var result = [];
  if (Array.prototype.some.call(inputs, function(input) {
      return input.value === "";
    })) {
    alert("Inputs should not be empty!!!");
    return false;
  }
  Array.prototype.forEach.call(inputs, function(input) {
    result.push(input.value);
  });
  return result;
}

演示:

function getCandidateNames() {
  var inputs = document.getElementsByClassName("candidate");
  var result = [];
  if (Array.prototype.some.call(inputs, function(input) {
      return input.value === "";
    })) {
    alert("Inputs should not be empty!!!");
    return false;
  }
  Array.prototype.forEach.call(inputs, function(input) {
    result.push(input.value);
  });
  console.log(result);
  return result;
}
<fieldset id="candidates">
  <legend>Candidates</legend>
  <div>
    <label for="cand1">Candidate 1</label>
    <input class="candidate" id="cand1" placeholder="Candidate">
  </div>
  <div>
    <label for="cand2">Candidate 2</label>
    <input class="candidate" id="candName" placeholder="Candidate">
  </div>
  <div>
    <label for="cand3">Candidate 3</label>
    <input class="candidate" id="candName2" placeholder="Candidate">
  </div>
</fieldset>
<button onclick="getCandidateNames()">Validate</button>

注意:

注意 Array.prototype.forEach.callArray.prototype.some.call 的使用,它们用于遍历 nodeList 借用 JavaScript Array 内置函数。


替代方案:

这是使用简单语法的替代方法:

function getCandidateNames() {
  var inputs = document.getElementsByClassName("candidate");
  var result = [];
  for (var i = 0; i < inputs.length; i++) {
    if (inputs[i].value !== "") {
      result.push(inputs[i].value);
    } else {
      alert("Inputs can't be empty !!!");
      return false;
    }
  }
  return result;
}

演示:

function getCandidateNames() {
  var inputs = document.getElementsByClassName("candidate");
  var result = [];

  for (var i = 0; i < inputs.length; i++) {
    if (inputs[i].value !== "") {
      result.push(inputs[i].value);
    } else {
      alert("Inputs can't be empty !!!");
      return false;
    }
  }
  console.log(result);
  return result;
}
<fieldset id="candidates">
  <legend>Candidates</legend>
  <div>
    <label for="cand1">Candidate 1</label>
    <input class="candidate" id="cand1" placeholder="Candidate">
  </div>
  <div>
    <label for="cand2">Candidate 2</label>
    <input class="candidate" id="candName" placeholder="Candidate">
  </div>
  <div>
    <label for="cand3">Candidate 3</label>
    <input class="candidate" id="candName2" placeholder="Candidate">
  </div>
</fieldset>
<button onclick="getCandidateNames()">Validate</button>

关于javascript - 如果在此代码中输入为空,如何添加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44850248/

相关文章:

mysql - Oracle 在 for 循环中提交

python - 如何将这段 Python 代码写得更短?

javascript - 循环遍历具有不同结果的 JavaScript 元素数组的两种方法

Javascript:更改 z-index onclick

javascript - jquery 中的 toString 方法?或类似的东西

javascript - HTML:根据选择仅显示两个数据表中的一个

html - 表填充顶部

javascript - 在选择选项中更改颜色 - HTML/CSS/JQuery - Mac

javascript - 为什么在 Chrome 扩展的内容脚本中使用 document.location 时页面会重新加载?

javascript - 为特定 div 设置背景颜色的最佳方法