JS/HTML 当表单不完整时,我的表单提交按钮没有显示错误消息

JS/HTML my form submit button isn't showing an error message when the form is incomplete

只学习了几个月,努力学习基础知识。我创建了一个表单,我尝试输入 javascript 以在单击提交按钮时显示错误消息,但信息不完整。到目前为止,我只在用户名字段上对此进行了测试,但是当我单击提交但将用户名留空时,我的消息 "Name is required" 没有显示。

我从 YouTube 视频中遵循了这段代码,据我所知,它看起来还不错!我也把 js 放在语法验证器中。我最初在 div 上有 ID 而不是输入标签,所以改变了这个。

const name = document.getElementById('name')

formZ.addEventListener('submit', (e) => {
  let messages = []
  if (name.value === '' || name.value == null) {
    messages.push('Name is required')
  }

  if (messages.length > 0) {
    e.preventDefault()
    error.innerText = messages.join(', ')
  }
})
<div id="errorMessage"> </div>

<form action="/" method="GET" id="formZ">
  <div id="form">
    <div>
      <input type="text" placeholder="Username" required="" class="inputField" id="name">
    </div>
    <div id="submitArea">
      <button type="submit" class="submitButton">Submit</button>
    </div>
  </div>
</form>

所以我的目标是,用户尝试提交表单而不填写他们的名字,弹出一条错误消息说 "Name is required"。

您没有得到预期的结果,因为名称字段是 required,这意味着如果该字段留空,则不会提交。

由于您在提交时所做的唯一检查是 name 不为空或不为空,并且当 name 为空时浏览器会自动阻止用户提交表单,因此您不需要看不到错误消息。

我添加了一个条件,用于在用户输入字符串 a 时添加错误。尝试输入 a 并提交,您将看到您的预期结果。

此外,您的代码中缺少一些变量(errorformZ),因此我也添加了它们。

在我看来,您有两种选择: 1. 添加不同的错误情况,不检查空值的情况。 2. 不要使用 required 属性.

无论如何,我建议您阅读有关 form validation 的内容,它可能会对您有所帮助。

const name = document.getElementById('name');
const error = document.getElementById('errorMessage');
const formZ = document.getElementById('formZ');

formZ.addEventListener('submit', (e) => {

  let messages = [];
  if (name.value === '' || name.value == null || name.value === 'a') {
    messages.push('Name is required');
  }

  if (messages.length > 0) {
    e.preventDefault()
    error.innerText = messages.join(', ')
  }
})
<div id="errorMessage"> </div>

<form action="/" method="GET" id="formZ">
  <div id="form">
    <div>
      <input type="text" placeholder="Username" required="" class="inputField" id="name">
    </div>
    <div id="submitArea">
      <button type="submit" class="submitButton">Submit</button>
    </div>
  </div>
</form>