Как перебрать кнопки те что перебирались после загрузки страницы но еще раз при нажатия на определеный элемент?
Ниже вот такой код. После загрузки у меня сразу перебирает кнопки openPub , и если я на ту кнопку нажимаю, у меня открывается окно, и в нем такая же кнопка есть с классом, и она не попала в перебор потому что после загрузке страницы , такой кнопки еще не было, но она делает такую же функцию что и другие, можно как то сделать что после нажатия кнопки, делался еще раз перебор кнопок openPub через forEach? P.S Надеюсь вы меня поняли)
openPub.forEach(e => {
e.addEventListener('click', event => {
event.preventDefault();
let htmlPubMenu;
if (e.classList.contains('contact-pup')) {
htmlPubMenu = `<div class="contact-menu animation">
<div class="exit">
<i class="fas fa-times"></i>
</div>
<div class="left-side">
<h3 class="contact-menu__title">LET'S TALK!</h3>
<h2 class="contact-menu__sup-title">CALL ME OR SEND ME A REQUEST</h2>
<div class="contact-menu__contact-person">
<div class="contact-menu__phone-text">
<i class="fas fa-phone"></i> +380986404004
</div>
<div class="contact-menu__email-text">
<i class="fas fa-envelope"></i> [email protected]
</div>
</div>
<form action="POST">
<label for="email">
Adress e-mail
</label>
<input class="contact-menu__email" type="email" name="email" id="email" placeholder="Adress e-mail">
<label for="text">
Request
</label>
<textarea class="contact-menu__request" name="text" id="text"
placeholder="Type your request..."></textarea>
<div class="contact-menu__wrap-btn">
<button class="contact-menu__send" type="submit">SEND</button>
</div>
</form>
</div>
<div class="rigth-side">
<div class="contact-menu__wrap-img">
<img class="contact-menu__img" src="img/request.png" alt="request">
</div>
</div>
</div>`
} else if (e.classList.contains('resume-pup')) {
htmlPubMenu = `<div class="resume animation">
<div class="exit">
<i class="fas fa-times"></i>
</div>
<h3 class="resume__title">
Resume
</h3>
<div class="resume__btns">
<button class="resume__download btn">DOWNLOAD PDF</button>
<button class="resume__print btn">PRINT</button>
</div>
<div class="resume__content">
<div class="resume__left-side">
<div class="resume__descr">
<h4 class="resume__title-section resume__title-section-first">COURSES</h4>
<div class="resume__wrap-info resume__wrap-info-first">
<div class="resume__year">2019</div>
<h5 class="resume__info-title"> QA tester</h5>
<h6 class="resume__info-sub-title">Software Testing course at QATestLab</h6>
<p class="resume__info-text">In the 2019 i bought Software Testing course at QATestLab and passed
online course. Then i had been passing trainee week and got basic skills of QA testing.</p>
</div>
<div class="resume__wrap-info">
<div class="resume__year">2020</div>
<h5 class="resume__info-title">Angular</h5>
<h6 class="resume__info-sub-title">The complete angular master class Udemy</h6>
<p class="resume__info-text">In the 2020 i got angular framework and passed a whole course. In the
course except front end material included: Angular Material/Redux|Unit testing and HTTP request.
</p>
</div>
</div>
</div>
<div class="resume__rigth-side">
<div class="resume__descr">
<h4 class="resume__title-section resume__title-section-first">EDUCATION</h4>
<div class="resume__wrap-info resume__wrap-info-first">
<div class="resume__year">2018 - 2021</div>
<h5 class="resume__info-title">Accounting and audit</h5>
<h6 class="resume__info-sub-title">National University of Food Technologies, Kyiv</h6>
</div>
<div class="resume__wrap-info">
<div class="resume__year">2014 - 2018</div>
<h5 class="resume__info-title">Accounting and audit</h5>
<h6 class="resume__info-sub-title">College of Food Technologies, Lviv</h6>
</div>
</div>
<div class="resume__descr">
<h4 class="resume__title-section">SKILLS</h4>
<div class="resume__skills">
<div class="resume__name-skill resume__name-skills-html">HTML</div>
<div class="resume__name-skill resume__name-skills-css">CSS</div>
<div class="resume__name-skill resume__name-skills-js">JavaScript</div>
<div class="resume__name-skill resume__name-skills-angular">Angular</div>
<div class="resume__name-skill resume__name-skills-jq">jQuery</div>
<div class="resume__name-skill resume__name-skills-sql">SQL</div>
</div>
</div>
</div>
</div>
<div class="resume__wrap-btn">
<button class="resume__btn contact-pup open-pub">HIRE ME</button>
</div>
</div>`
}
pupMenu.innerHTML = htmlPubMenu;
open()
document.body.classList.add('modal-hiden');
let exitMenu = document.querySelector('.exit');
exit(exitMenu)
})
})
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
Используйте Делегирование событий, добавив обработчик на родительский элемент, в котором лежат все цели клика.
Код из вопроса можно переписать так:
const html = {
// Большие строки прямо внутри if / else засоряют код, поэтому убрал их сюда.
// +В современных редакторах можно свернуть такие блоки в 1 строчку.
contact: (`
<div class="contact-menu animation">
<div class="exit">
<i class="fas fa-times"></i>
</div>
<div class="left-side">
<h3 class="contact-menu__title">LET'S TALK!</h3>
<h2 class="contact-menu__sup-title">CALL ME OR SEND ME A REQUEST</h2>
<div class="contact-menu__contact-person">
<div class="contact-menu__phone-text">
<i class="fas fa-phone"></i> +380986404004
</div>
<div class="contact-menu__email-text">
<i class="fas fa-envelope"></i> [email protected]
</div>
</div>
<form action="POST">
<label for="email">
Adress e-mail
</label>
<input class="contact-menu__email" type="email" name="email" id="email" placeholder="Adress e-mail">
<label for="text">
Request
</label>
<textarea class="contact-menu__request" name="text" id="text"
placeholder="Type your request..."></textarea>
<div class="contact-menu__wrap-btn">
<button class="contact-menu__send" type="submit">SEND</button>
</div>
</form>
</div>
<div class="rigth-side">
<div class="contact-menu__wrap-img">
<img class="contact-menu__img" src="img/request.png" alt="request">
</div>
</div>
</div>
`),
resume: (`
<div class="resume animation">
<div class="exit">
<i class="fas fa-times"></i>
</div>
<h3 class="resume__title">Resume</h3>
<div class="resume__btns">
<button class="resume__download btn">DOWNLOAD PDF</button>
<button class="resume__print btn">PRINT</button>
</div>
<div class="resume__content">
<div class="resume__left-side">
<div class="resume__descr">
<h4 class="resume__title-section resume__title-section-first">COURSES</h4>
<div class="resume__wrap-info resume__wrap-info-first">
<div class="resume__year">2019</div>
<h5 class="resume__info-title"> QA tester</h5>
<h6 class="resume__info-sub-title">Software Testing course at QATestLab</h6>
<p class="resume__info-text">In the 2019 i bought Software Testing course at QATestLab and passed
online course. Then i had been passing trainee week and got basic skills of QA testing.</p>
</div>
<div class="resume__wrap-info">
<div class="resume__year">2020</div>
<h5 class="resume__info-title">Angular</h5>
<h6 class="resume__info-sub-title">The complete angular master class Udemy</h6>
<p class="resume__info-text">In the 2020 i got angular framework and passed a whole course. In the
course except front end material included: Angular Material/Redux|Unit testing and HTTP request.
</p>
</div>
</div>
</div>
<div class="resume__rigth-side">
<div class="resume__descr">
<h4 class="resume__title-section resume__title-section-first">EDUCATION</h4>
<div class="resume__wrap-info resume__wrap-info-first">
<div class="resume__year">2018 - 2021</div>
<h5 class="resume__info-title">Accounting and audit</h5>
<h6 class="resume__info-sub-title">National University of Food Technologies, Kyiv</h6>
</div>
<div class="resume__wrap-info">
<div class="resume__year">2014 - 2018</div>
<h5 class="resume__info-title">Accounting and audit</h5>
<h6 class="resume__info-sub-title">College of Food Technologies, Lviv</h6>
</div>
</div>
<div class="resume__descr">
<h4 class="resume__title-section">SKILLS</h4>
<div class="resume__skills">
<div class="resume__name-skill resume__name-skills-html">HTML</div>
<div class="resume__name-skill resume__name-skills-css">CSS</div>
<div class="resume__name-skill resume__name-skills-js">JavaScript</div>
<div class="resume__name-skill resume__name-skills-angular">Angular</div>
<div class="resume__name-skill resume__name-skills-jq">jQuery</div>
<div class="resume__name-skill resume__name-skills-sql">SQL</div>
</div>
</div>
</div>
</div>
<div class="resume__wrap-btn">
<button class="resume__btn contact-pup open-pub">HIRE ME</button>
</div>
</div>
`),
};
document.addEventListener('click', function (e) {
// Определяет на кого кликнули и запускает функцию-обработчик для этого элемента.
// При необходимости, функции тоже можно собрать в общий объект.
let target = e.target;
switch (true) { // openPub ↓ какой там у него класс.
case hasClass(target, "open-pub"): return onclick_open_pub(target, e);
case hasClass(target, "кнопка-2"): return onclick_button_2(target, e);
case hasClass(target, "кнопка-3"): return onclick_button_3(target, e);
// ...
// return или break обязательны, чтобы выполнялась только одна функция.
}
});
function onclick_open_pub(elem, event) {
// Почему переменные в одном месте названы pub, в другом pup - не понятно.
event.preventDefault();
if (hasClass(elem, "contact-pup")) {
pupMenu.innerHTML = html.contact;
} else if (hasClass(elem, "resume-pup")) {
pupMenu.innerHTML = html.resume;
}
open();
document.body.classList.add("modal-hiden");
let exitMenu = document.querySelector(".exit");
exit(exitMenu);
}
function onclick_button_2(elem, event) { }
function onclick_button_3(elem, event) { }
/***/
function hasClass(el, className) {
return el.classList.contains(className);
}