使用 javascript 进行表单验证 - event.target.form.classList 未定义 - css 技巧教程

Posted

技术标签:

【中文标题】使用 javascript 进行表单验证 - event.target.form.classList 未定义 - css 技巧教程【英文标题】:form validation with javascript - event.target.form.classList is undefined - css tricks tutorial 【发布时间】:2020-07-25 02:33:18 【问题描述】:

所以,我一直在关注 CSS-Tricks 关于表单验证的教程。

(https://css-tricks.com/form-validation-part-2-constraint-validation-api-javascript/)

这是我从该网站复制粘贴的代码。 为什么我会在控制台中收到错误消息说 “TypeError: event.target.form.classList is undefined.”?

我必须添加和编写什么来定义该事件。我是初学者,我可以想象,答案一定很简单。

这是目前为止的代码:

<body>
  <form action="form_process.php" method="post" class="validate">
    <label>Enter Name here:
      <input type="text" name="naaame" value="" required></input>
    </label>
    <label>Enter E-Mail here:
      <input type="email" name="email" value="" required></input>
    </label>
    <label>Enter Number here:
      <input type="number" name="number" value="" required></input>
    </label>
    <label>Enter Date here:
      <input type="date" name="date" value="" required></input>
    </label>
    <button type="submit">Send form</button>
  </form>

  <!-- Scripts from broiler plate not from tutorial -->

  <script src="js/vendor/modernizr-3.8.0.min.js"></script>
  <script src="js/vendor/modernizr-custom.js"></script>
  <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
  <script>
    window.jQuery || document.write('<script src="js/vendor/jquery-3.4.1.min.js"><\/script>')
  </script>
  <script src="js/plugins.js"></script>
  <script src="js/main.js"></script>

<!-- Scripts from Tutorial -->
<script>
 var forms = document.querySelectorAll('.validate');
 for (var i = 0; i < forms.length; i++) 
      forms[i].setAttribute('novalidate', true);
 

 // Listen to all blur events
 document.addEventListener('blur', function (event) 

    // Only run if the field is in a form to be validated
    if (!event.target.classList.contains('validate')) return;

    // Validate the field
    var error = event.target.validity;
    console.log(error);

 , true);
</script>

</body>
</html>

【问题讨论】:

【参考方案1】:

您在所有文档上注册了一个模糊事件,因此您必须预料到这种类型的错误

你必须检查目标是否不为空所以改变

if (!event.target.classList.contains('validate')) return;

if (event.target && !event.target.classList.contains('validate')) return;

【讨论】:

感谢您的快速回复! :-) 我试过了,它删除了 TypeError 消息。但是,现在以console.log(error); 结尾的部分不起作用。我认为它应该在控制台中向我显示错误,对吗?感谢您的宝贵时间。【参考方案2】:

所以,对于所有阅读过我的问题的人。 我找到了另一种方法,但没有解决我的问题。 但我发现了另一个 表单验证 polyfill javascript 库,它在浏览器 IE 9 之前都可以使用。

我现在正在使用这个:https://github.com/cferdinandi/bouncer

【讨论】:

以上是关于使用 javascript 进行表单验证 - event.target.form.classList 未定义 - css 技巧教程的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用JavaScript进行表单验证

用JavaScript进行表单验证

使用Javascript / jQuery进行Bootstrap 4表单验证

使用 Javascript 进行表单验证 - 字段值必须介于 2 个特定数字之间

html 使用JavaScript进行即时HTML5表单验证

我正在尝试使用javascript进行表单验证,但电子邮件验证不起作用