0
我编写了一个JavaScript对象文字来处理HTML页面上的多个模态。 当我点击一个按钮来显示模态时,出现以下错误。JavaScript Object Literal“this”
Uncaught TypeError: this.showModal is not a function
at HTMLButtonElement.modalBtns.(anonymous function).onclick (file:///C:/dj-sites/ux_bee/js/base.js:63:22)
我在想,问题在于“this”关键字指向按钮,而不是对象文字。不知道我应该如何解决这个问题。
var myModalObj = {
findAncestor: function(el, cls) {
while ((el = el.parentElement) && !el.classList.contains(cls));
return el;
},
showModal: function(btn){
var modal_id = btn.getAttribute('data-modal')
var modal = document.getElementById(modal_id);
modal.style.display = "block";
},
closeModal: function (btn){
var modal = this.findAncestor(btn, 'modal')
modal.style.display = "none";
},
init: function(){
var modalBtns = document.getElementsByClassName('my-modal-btn');
for(var i = 0; i < modalBtns.length; i++) {
var btn_modal = modalBtns[i];
modalBtns[i].onclick = function() {
this.showModal(btn_modal);
}
}
var closeBtns = document.getElementsByClassName('modal-close');
for(var i = 0; i < closeBtns.length; i++) {
var btn_close = closeBtns[i];
closeBtns[i].onclick = function() {
this.closeModal(btn_close);
}
}
}
}
myModalObj.init()
将您的事件处理程序回调函数绑定到正确的上下文 - 默认情况下,处理程序注册的按钮元素不是您的myModalObj对象。像这样:modalBtns [i] .onclick = function(){this.showModal(btn_modal)}。bind(this); – IAmDranged