3 回答

TA貢獻1836條經驗 獲得超5個贊
那是因為您在每次點擊時都注冊了一個事件偵聽器!因此,每次單擊時,偵聽器都會再次執行。
您的代碼已修復:
function showOfferMessage(element) {
element.classList.toggle("active");
var content = element.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
}
<div class="offer-row collapsible" id="'.$oid.'" onclick="showOfferMessage(this)">
<div class="offer-info-item">
<div class="offcatreview-title">
<h3>Cat. Rating</h3>
</div>
<div class="offer-cat-rating">
</div>
</div>
</div>
<div class="content" style="display: block">
<p>'.$message.'</p>
</div>

TA貢獻1155條經驗 獲得超0個贊
該onclick
事件執行在元素showOfferMessage() {}
上放置事件偵聽器的函數"collapsible"
。然后第二次單擊執行事件監聽器的內容。
但首先,只要你只有一個名為"collapsible"
“為什么”的元素,就嘗試獲取多個元素。使用 css 樣式選擇器執行document.querySelector
并定位元素,然后addEventListener
直接鏈接到該選擇器上。
當您像這樣查詢樣式時,您會得到顯式設置的樣式。在您的情況下,如果沒有單擊該"collapsible"
元素,則不會設置顯示樣式。即使 div 具有塊的默認顯示樣式,但它尚未顯式設置,因此...style.display
將返回空字符串 -> falsy。您必須使用該getComputedStyle
方法獲得隱式樣式,

TA貢獻1874條經驗 獲得超12個贊
我遇到了類似的問題,最終使用!==而不是===:
if (content.style.display !== "none") {
content.style.display = "none";
} else {
content.style.display = "block";
};
- 3 回答
- 0 關注
- 157 瀏覽
添加回答
舉報