javascript - 表单验证未正确响应

标签 javascript html

我编写了一个简单的脚本来在提交时检查我的表单数据。但是,如果输入为空,则不应继续发送。为什么不起作用?

          <script src="scripts/formvalidate.js"></script>
          <h3 id="required">Contact Me</h3>
          <form name="form" onsubmit="return formValidate()" method="POST">
            <label for="name">Name<span id="asterisk" id="label"></span></label>
            <input type="text" id="name" name="name">
            <label for="email">Email<span id="asterisk" id="label"></span></label>
            <input type="email" id="email" name="email">
            <label for="subject">Subject<span id="asterisk" id="label"></span></label>
            <input type="text" id="subject" name="subject">
            <label for="message">Message<span id="asterisk" id="label"></span></label>
            <textarea name="message" id="message"></textarea>
            <button type="submit" id="submit">Submit</button>
          </form>

function formValidate() {
    var form = document.forms["form"];
    var name = form.elements["name"].value;
    var email = form.elements["email"].value;
    var subject = form.elements["subject"].value;
    var message = form.elements["message"].value;
    var result = false;
    var output = "*";
    var required = "Required";
    var asterisk = "* ";
    if (name == "" || email == "" || subject == "" || message == "") {
        document.getElementById("label").innerHTML = output;
        document.getElementById("asterisk").innerHTML = asterisk;
        document.getElementById("required").innerHTML = required;
        alert('Please fill out all fields');
        return false;
    }
    else {
        alert('Thanks for contacting me');
        result = true;
    }
    return result;
}

最佳答案

您不能使用具有相同 ID 的多个元素,因为 ID 应该唯一标识页面的元素(HTML5 Specification 表示:ID 必须在文档范围内唯一。) ,尝试改用类,并将 getElementById() 更改为 getElementsByClassName() 就像这样应该可以正常工作:

function formValidate() {
    var form = document.forms["form"];
    var name = form.elements["name"].value;
    var email = form.elements["email"].value;
    var subject = form.elements["subject"].value;
    var message = form.elements["message"].value;
    var output = "*";
    var required = "Required";
    var asterisk = "* ";
    if (name == "" || email == "" || subject == "" || message == "") {
        document.getElementsByClassName("label").innerHTML = output;  //notice how I changed the function used here
        document.getElementById("asterisk").innerHTML = asterisk;
        document.getElementById("required").innerHTML = required;
        alert('Please fill out all fields');
        return false;
    }
    else {
        alert('Thanks for contacting me');
        return true;
    }
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <script src="formvalidate.js"></script>
    <title></title>
  </head>
  <body>
          <h3 id="required">Contact Me</h3>
          <form name="form" onsubmit="return formValidate()" method="POST">
            <label for="name">Name<span id="asterisk" class="label"></span></label>
            <input type="text" id="name" name="name">
            <label for="email">Email<span id="asterisk" class="label"></span></label>
            <input type="email" id="email" name="email">
            <label for="subject">Subject<span id="asterisk" class="label"></span></label>
            <input type="text" id="subject" name="subject">
            <label for="message">Message<span id="asterisk" class="label"></span></label>
            <textarea name="message" id="message"></textarea>
            <button type="submit" id="submit">Submit</button>
          </form>
  </body>
</html>

请注意,您尝试插入的星号仅插入到一个输入中,原因与之前提到的相同(多个 ID 对 DOM 来说是毫无意义的)。当 DOM 尝试修复这个问题时,它只会获取文档中具有给定 id 的第一个元素(要修复它,只需将 id="asterisk" 类型更改为 class="星号”类型)

情节扭曲:您可能没有看到任何错误屏幕的原因是(我猜)您正在 Chrome 上测试它,它只显示一毫秒的错误。我个人的建议是使用 Firefox 进行测试,因为它根本不会隐藏任何错误。

关于javascript - 表单验证未正确响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638604/

相关文章:

javascript - 获取多级javascript对象属性的简单方法

javascript - 如何将字符串转换为 map ?

javascript - Else if 语句(总是选择最后一个条件

javascript - PhoneGap 1.5 "menubutton"和 "searchbutton"与 jQuery Mobile

jquery - jQuery 中的 Toggle 和 slideToggle 有什么区别?

javascript - AngularJS:MathJax 绑定(bind)

html - 背景模糊在 IE 浏览器中不起作用

html - 如何在不增大父输入元素的情况下增大字体大小?

html - 断点没有按预期工作

html - 文本区域光标不是从头开始