【问题标题】:How to disable preventDefault in an event listener using Vanilla JS如何使用 Vanilla JS 在事件监听器中禁用 preventDefault
【发布时间】:2018-09-01 16:13:36
【问题描述】:

我对 JS 还是很陌生,希望能够删除停止表单提交的事件侦听器。我已经尝试了多种不同的解决方案来在 JS 而不是 jquery 中做到这一点,但没有运气。该表格目前未提交,但如果我的“如果”条件为假,我无法将其反转。

    
    var element = document.querySelector('form');
    element.addEventListener('submit', event => {
    event.preventDefault();
    });
   
    function validateForm() {
    
    var error = "";

        if (document.getElementById("name").value == "") {
        
           error += "<p>Name field required</p>"
       
       
        } 
    
        if (document.getElementById("email").value == "") {
        
           error += "<p>Email field required</p>"
      
        } 
    
        if (document.getElementById("subject").value == "") {
        
           error += "<p>Subject field required</p>"
       
        } 
    
        if (document.getElementById("question").value == "") {
        
           error += "<p>Question field required</p>"
       
        } 
     
    
        if (error != "") {
    
        document.getElementById("errorDiv").style.display = "block";
    
        document.getElementById("errorDiv").innerHTML = "<b>There wer error(s) in the form, please complete all required fields</b>" + error;
    
    
    } else {
  
            var element = document.querySelector('form');
            element.removeEventListener('submit', event => {
            event.preventDefault();
            });
            }
   
}
    <div id="errorDiv"></div>
    <form id="contact_form" onsubmit="validateForm();">
    <button type="submit"></button>

如果有人可以提供帮助,请提前感谢。

【问题讨论】:

  • 为什么不能从代码中手动替换?
  • 您的主要问题是首先使用两个不同的事件侦听器。一个是内联onsubmit,另一个是由addEventListener 创建的一个,使用一个或另一个,但不能同时使用。现代最佳实践是不要使用像onsubmit 这样的内联方法,而只使用addEventListener

标签: javascript addeventlistener preventdefault


【解决方案1】:

我认为您应该从您的 validateForm() 函数中返回 true/false 以阻止/提交表单。

1.您必须在html标记中从函数返回值:

<form id="contact_form" onsubmit="return validateForm();">

2. 根据验证从您的validateForm() 返回true/false

function validateForm() {
  var error = "";
    ................
    ................
    ................
    if (error != "") {
       document.getElementById("errorDiv").style.display = "block";
       document.getElementById("errorDiv").innerHTML = "<b>There wer error(s) in the   form, please complete all required fields</b>" + error;
       return false;

   } else {
     return true;
  }
 }
  1. 不需要阻止表单提交因此删除此代码。

    var element = document.querySelector('form');
    element.addEventListener('submit', event => {
    event.preventDefault();
    });
    

【讨论】:

  • 谢谢,我试试这个。我还有其他用于单独验证字段的“if”语句,这也适用于那些吗?
猜你喜欢
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2016-10-23
  • 2023-01-23
相关资源
最近更新 更多