Не удалось удалить прослушиватель событий PreventDefault при отправке формы (JavaScript) - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть флажок политики конфиденциальности в форме, и я установил preventDefault() на кнопку от отправки, чтобы адрес электронной почты не отправлялся, если флажок не установлен.

В приведенном ниже коде я есть простой метод removeEventListener, установленный на флажок, когда флажок установлен, но код не работает?

Метод preventDefault() работает, но отправка не происходит, если privacyCheckbox.checked === true условие выполнено.

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

// prevent default
function stopFormSubmit (e) {
    e.preventDefault()
}

if (privacyCheckbox.checked === false) {
    mailFormSubmit.addEventListener('click', stopFormSubmit, false)
}   

if (privacyCheckbox.checked === true) {
    mailFormSubmit.removeEventListener('click', stopFormSubmit, false)
}

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Лог c, который у вас есть, просто запускается один раз, поэтому он позаботится только о начальном состоянии флажка. Если вы хотите присоединить / отсоединить прослушиватели событий каждый раз, когда флажок меняется , вы должны подключить прослушиватель событий к вашему флажку:

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();
0 голосов
/ 15 апреля 2020

Вам не нужно удалять EventListener, просто сделайте это. Позвольте мне предположить, что вы запускаете

formSumitfun c на событие отправки формы, тогда ваша функция будет

function formSumitfunc(e) {


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

    }

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

    } 


}
...