addEventOpenModal
он собственно устанавливает событие click на кнопку. В самом обработчике события мне нужен this этого события, т.к. в нём находиться кнопка по которой пользователь нажал, но так же мне внутри обработчика нужен и объект класс которому этот метод принадлежит. Проблема в том что этот обработчик который я установил мне нужно удалять, следовательно код ниже с анонимной функцией я оставить не могу, потому что я тогда не смогу удалить обработчик. Я пробовал через bind
передать параметры в событие, но он меняет контекст, я теряю this самого события. Подскажите пожалуйста можно ли вообще оставить this события, и ещё добавить своими дополнительные параметры ?addEventOpenModal()
{
let btnArray = document.querySelectorAll(this.btnOpenModal);
let objectCurrent = this; //Получаю объект класса вот тут для использования в обработчике
btnArray.forEach((element) => {
element.addEventListener('click',function(e) {
objectCurrent.itemRemove = this.closest('.list-object__item');
let idRemove = this.getAttribute('data-id');
let name = this.getAttribute('data-title');
let entity = window.switchObjects.getActionEntity();
let modal = document.querySelector('[data-remove-modal]');
objectCurrent.idRemove = idRemove;
objectCurrent.entity = entity;
let modalOverlay = modal.querySelector('.modal__overlay');
let modalBody = modal.querySelector('.modal__body');
let modalTitle = modal.querySelector('.modal__title-dynamic');
modalTitle.innerHTML = name;
objectCurrent.modalElem = new objectCurrent.modal(modalBody, modalOverlay, window.animation);
objectCurrent.modalElem.showModal();
objectCurrent.formRemove = document.querySelector('.modal__form-remove');
objectCurrent.formRemove.addEventListener('submit',objectCurrent.submitEvent);
});
});
}
window
а потом в методе где этот объект класса мне необходим я к нему получаю доступ через window
.window
addEventOpenModal()
{
let btnArray = document.querySelectorAll(this.btnOpenModal);
window.objectCurrent = this;
btnArray.forEach((element) => {
element.addEventListener('click',this.eventOpenModal);
});
}
window
к объекту который мне нуженeventOpenModal(e)
{
window.objectCurrent.itemRemove = this.closest('.list-object__item');
let idRemove = this.getAttribute('data-id');
let name = this.getAttribute('data-title');
let entity = window.switchObjects.getActionEntity();
let modal = document.querySelector('[data-remove-modal]');
window.objectCurrent.idRemove = idRemove;
window.objectCurrent.entity = entity;
let modalOverlay = modal.querySelector('.modal__overlay');
let modalBody = modal.querySelector('.modal__body');
let modalTitle = modal.querySelector('.modal__title-dynamic');
modalTitle.innerHTML = name;
window.objectCurrent.modalElem = new window.objectCurrent.modal(modalBody, modalOverlay, window.animation);
window.objectCurrent.modalElem.showModal();
window.objectCurrent.formRemove = document.querySelector('.modal__form-remove');
window.objectCurrent.formRemove.addEventListener('submit',window.objectCurrent.submitEvent);
}
let objectCurrent = this; //Получаю объект класса вот тут для использования в обработчике
btnArray.forEach((element) => {
element.addEventListener('click',function(e) {
objectCurrent.itemRemove = this.closest('.list-object__item');
btnArray.forEach((element) => {
element.addEventListener('click', (e) => {
// и здесь кликнутый элемент будет доступен как e.target
// а внешний this будет сохранен в objectCurrent
objectCurrent.itemRemove = <b>e.target</b>.closest('.list-object__item');
let idRemove = <b> e.target</b>.getAttribute('data-id');
let name = <b>e.target</b>.getAttribute('data-title');