Can';在表单提交(JavaScript)上删除'PreventDefault'事件侦听器

Can';在表单提交(JavaScript)上删除'PreventDefault'事件侦听器,javascript,events,preventdefault,Javascript,Events,Preventdefault,我在表单上有一个隐私策略复选框,并且在“发件人提交”按钮上设置了preventDefault(),因此除非选中该复选框,否则不会提交电子邮件地址 在下面的代码中,我在复选框上放置了一个简单的removeEventListener方法,用于检查复选框是否被选中,但代码是否不起作用 preventDefault()方法起作用,但如果满足privacyCheckbox.checked==true条件,则不会提交 var mailFormSubmit=document.getElementById('

我在表单上有一个隐私策略复选框,并且在“发件人提交”按钮上设置了
preventDefault()
,因此除非选中该复选框,否则不会提交电子邮件地址

在下面的代码中,我在复选框上放置了一个简单的
removeEventListener
方法,用于检查复选框是否被选中,但代码是否不起作用

preventDefault()
方法起作用,但如果满足
privacyCheckbox.checked==true
条件,则不会提交

var mailFormSubmit=document.getElementById('mc-embedded-subscribe'),//订阅按钮
privacyCheckbox=document.getElementById('privacy-checkbox')//checkbox
//防止违约
函数stopFormSubmit(e){
e、 预防默认值()
}
if(privacyCheckbox.checked==false){
mailFormSubmit.addEventListener('click',stopFormSubmit,false)
}   
if(privacyCheckbox.checked==true){
mailFormSubmit.removeEventListener('click',stopFormSubmit,false)

}
您的逻辑只运行了一次,因此它将只考虑复选框的初始状态。如果要在复选框更改时附加/分离事件侦听器,则必须在复选框上连接事件侦听器:

const mailFormSubmit = document.getElementById('mc-embedded-subscribe'),  // subscribe button
      privacyCheckbox = document.getElementById('privacy-checkbox')       // checkbox

function stopFormSubmit (e) {
    e.preventDefault()
}

function updateSubmitBehavior() {
  if (privacyCheckbox.checked) {
    mailFormSubmit.removeEventListener('click', stopFormSubmit, false)
  } else {
    mailFormSubmit.addEventListener('click', stopFormSubmit, false)
  }
}

privacyCheckbox.addEventListener('change', updateSubmitBehavior);

updateSubmitBehavior();

您不需要删除VentListener,只要这样做即可。让我假设你开枪了

formSumitfunc在表单提交事件中,您的功能将

function formSumitfunc(e) {


    if (privacyCheckbox.checked == false) {
        e.preventDefault();

    }

    if (privacyCheckbox.checked == true) {
        // do whatever you want to do.

    } 


}

逻辑住在哪里?当
privacyCheckbox
更改时,您是否在事件期间运行它?@Jacob上面的代码是该站点的my.js文件中的完整代码。嗨@Jacob当未使用此答案选中复选框时,表单仍然提交。复选框是否开始选中?您可能需要调用函数一次来初始化状态。相应更新。啊,是的,现在可以了,谢谢。明天我将着手处理代码及其工作原理——在英国已经很晚了。嗨@adityaKumar,这只是伪代码,没有添加任何东西来解决问题。