Вы можете использовать прокси-метод или лямбда-выражение (или анонимную функцию) для прослушивателя событий и передавать аргументы в функцию модального отображения для изменения содержимого в модальных элементах.
Когда вызарегистрировать функцию в качестве обратного вызова для EventListener
, вы должны предоставить ссылку на функцию, но не вызывать ее напрямую.Это потому, что EventListener
вызовет функцию, как только будет запущено фактическое событие.Это ограничивает ваши параметры, поскольку изменчивость продолжает вызывать вашу функцию обратного вызова.
Если вместо передачи ссылки на функцию вы передаете лямбда-выражение, то можете вызывать все, что захотите, внутри лямбда-выражения, и это будетбудет выполняться только после того, как лямбда будет вызвана при возникновении события.
Это дает вам гибкость в определении методов со сложными сигнатурами аргументов, которые могут быть выполнены в результате запуска события, но с другими аргументами, являющимисяпередается для каждого уникального события.
Есть также несколько других способов сделать это, но я вижу это как самый чистый способ выполнить вашу задачу.
В приведенном ниже примере показано, как это может бытьсделано:
const modal = document.getElementById('modal');
const title = document.querySelector('#modal .title');
function openModal(color) {
title.innerText = `Selected color: ${color}`;
modal.style.display = 'block';
}
function closeModal() {
modal.style.display = 'none';
}
document.getElementById('modal-close').addEventListener('click', closeModal);
const buttonG = document.getElementById('g-btn');
const buttonR = document.getElementById('r-btn');
const buttonB = document.getElementById('b-btn');
buttonG.addEventListener('click', () => openModal('Green'));
buttonR.addEventListener('click', () => openModal('Red'));
buttonB.addEventListener('click', () => openModal('Blue'));
div#modal {
position: absolute;
top: 0;
left: 0;
width: 300px;
height: 100px;
background: whitesmoke;
display: none;
}
<div id="container">
<span class="title">Click one of the buttons to see the effect...</span>
</div>
<div id="modal">
<div class="title"></div>
<button type="button" id="modal-close">Close</button>
</div>
<button id="g-btn" type="button">Green</button>
<button id="r-btn" type="button">Red</button>
<button id="b-btn" type="button">Blue</button>