3 回答

TA貢獻1770條經驗 獲得超3個贊
您需要雙擊,因為在內addEventListener()
聯點擊處理程序中使用附加事件處理程序。
我建議您使用DOMContentLoaded
事件和唯一附加事件處理程序addEventListener()
window.addEventListener('DOMContentLoaded', (event) => {
console.log('DOM fully loaded and parsed');
const close = document.querySelector('.popup__close');
const popup = document.querySelector('.popup');
close.addEventListener('click', function() {
popup.style.opacity = '0';
});
});
并且不需要丑陋的內聯點擊處理程序和函數hidePopup(),刪除它們

TA貢獻1810條經驗 獲得超5個贊
刪除對 addEventListener 的無關調用,并簡單地將元素隱藏在單擊事件處理程序中。
function hidePopup() {
const close = document.querySelector('.popup__close');
const popup = document.querySelector('.popup');
popup.style.opacity = '0';
}

TA貢獻1829條經驗 獲得超6個贊
在函數 hidePopup 中,注意您在函數第一次運行時“addEventListener”,
當您添加 EventListener 時,不會使函數運行!您分配監聽器,以便稍后如果單擊,它將運行您在監聽器中分配的功能。
如果您使用 addEventListener,則無需再使用 onClick 屬性來調用該函數...
我看到您的目標是在單擊關閉按鈕時隱藏內容,按照您的代碼,有兩種方法:
第一種方式
//you only need to select once
const popup = document.querySelector('.popup');
function hidePopup() {
popup.style.opacity = '0';
}
//additional function if you want to show pop up
function showPopup() {
popup.style.opacity = '1';
}
<div class="popup">
<span class="popup__close" onclick="hidePopup()">
<i class="fas fa-lg fa-times">X</i>
</span>
<h3 class="popup__heading">
Check our newsletter!
</h3>
<p class="popup__text u-margin-bottom-xs">
Register to our newsletter to see the newest offers!
</p>
<a href="#" class="btn btn--small btn--rounded">Register</a>
</div>
<Br><Br><br>
<span class="popup__show" onclick="showPopup()">
click me to show pop up
</span>
第二種方式
//select both button and Popup
const popup = document.querySelector('.popup');
const close = document.querySelector('.popup__close');
close.addEventListener('click', function() {
popup.style.opacity = '0';
});
const show = document.querySelector('.popup__show');
show.addEventListener('click', function() {
popup.style.opacity = '1';
});
<div class="popup">
<span class="popup__close">
<i class="fas fa-lg fa-times">X</i>
</span>
<h3 class="popup__heading"https://stackoverflow.com/questions/63126988/why-do-i-need-to-click-two-times-to-trigger-an-onclick-function#>
Check our newsletter!
</h3>
<p class="popup__text u-margin-bottom-xs">
Register to our newsletter to see the newest offers!
</p>
<a href="#" class="btn btn--small btn--rounded">Register</a>
</div>
<span class="popup__show">Click here to show pop up</span>
添加回答
舉報