У меня интересная проблема, которая, на мой взгляд, должна быть довольно простой, но она поставила меня в тупик. Я пытаюсь просто отслеживать проверенное состояние флажка (если установлен флажок, включить кнопку, если не отмечен, оставить кнопку отключена). Проблема, с которой я столкнулся, заключается в том, что я не могу должным образом отслеживать проверенное состояние флажка в приемнике событий, но он работает, если я добавляю его как атрибут onclick в html, и я понятия не имею, почему это так.
Рабочий код с атрибутом onclick html:
Html:
<input type='checkbox' name='check' id='consent' onclick='checkConsent()'>
<label for='check'>Lorem ipsum</label>
<button id='consentBtn' disabled>Agree</button>
JS :
const dialogConsentBtn = document.getElementById('consentBtn');
const consentCheck = document.getElementById('consent');
const checkConsent = () => {
if (consentCheck.checked === true) {
console.log('checked');
dialogConsentBtn.disabled = false;
} else {
console.log('unchecked');
dialogConsentBtn.disabled = true;
}
}
Неработающий код с прослушивателем событий:
HTML:
<input type='checkbox' name='check' id='consent'>
<label for='check'>Lorem ipsum</label>
<button id='consentBtn' disabled>Agree</button>
JS:
const dialogConsentBtn = document.getElementById('consentBtn');
const consentCheck = document.getElementById('consent');
consentCheck.addEventListener('click', (event) => {
event.preventDefault();
if (consentCheck.checked === true) {
console.log('checked');
dialogConsentBtn.disabled = false;
consentCheck.checked = true;
} else {
console.log('unchecked');
dialogConsentBtn.disabled = true;
consentCheck.checked = false;
}
}, false);
В приведенном выше (нерабочем) коде я получаю следующее поведение:
- флажок не проверяет или снимает флажок визуально
- console.log всегда выводит «непроверенный», так что если условие всегда возвращается
У меня есть ощущение, что есть какая-то фундаментальная разница между тем, как эти две вещи обрабатываются браузер, который лежит в основе моей дилеммы, но я просто не могу понять, что это такое. Любая помощь с этим будет принята с благодарностью.
PS Я также попытался использовать приведенный выше код с событием 'change' в прослушивателе событий вместо события click, но я столкнулся с той же проблемой.