0
我正在彈出模式,當我點擊一個按鈕時,我添加一個類將顯示屬性從'無'更改爲'塊'。它首先運行正常,然後我通過JS附加一些HTML到身體,從那以後它沒有工作。類名不被添加到Div
// Open modal
function openModal(clicked_id) {
var button = document.getElementById(clicked_id);
var modal = button.getAttribute("data-modal");
var modalElement = document.getElementById(modal);
document.body.innerHTML += "<div id='modal-backdrop' class='modal-backdrop'></div>";
var backdrop = document.getElementById("modal-backdrop");
backdrop.className += " modal-open";
modalElement.className += " modal-open";
// Close Same Modal Event Handlers
(function() {
document.getElementById("modal-close").onclick = function(e) {
closeModal(modalElement, backdrop);
}
document.getElementById("close").onclick = function(e) {
closeModal(modalElement, backdrop);
}
document.getElementById("modal-backdrop").onclick = function(e) {
closeModal(modalElement, backdrop);
}
})();
}
從debuggin我可以看到這個元素被選中和類名添加到類列表,但這不會反映在計算的HTML。我試着動線:
modalElement.className += " modal-open";
線之上:
document.body.innerHTML += "<div id='modal-backdrop' class='modal-backdrop'></div>";
但隨後關閉功能停止工作。在控制檯中沒有錯誤,調試器運行代碼就好像它的工作,所以我很難過。我有一個代碼,筆,顯示一切都一起買:http://codepen.io/WebDevelopWolf/pen/XMZdBg
這是偉大的感謝 - 只是這樣我就可以明白,雖然 - 如何來修復它?這與DOM更新有關嗎? –
儘管看起來像這樣,但element.className/element.innerHTML(以及其他所有以這種方式訪問的屬性)不是簡單的字符串,因此+ =運算符不起作用。但是,您可以通過'element.className = element.className +「modal-open」;'實現預期的效果。 – GameGibu
爲了擴展@GameGibu,我相信發生了什麼是由於innerHTML的工作原因。當使用'innerHTML + ='時,它將銷燬和重建容器的所有後代元素,這會刪除綁定到任何子元素的現有事件偵聽器。在你的情況下,這意味着關閉按鈕上的事件偵聽器被刪除。 –