Делаю обработчики для меню, получается так, что обрабатываю множество событий на различные селекторы. Получаю все элементы через класс с помощью querySelectorAll(); На выходе что-то подобное:
let elem1 = document.querySelectorAll("elem-class-1 > li > a");
let elem2 = document.querySelectorAll("elem-class-1 > li > a");
let elem2 = document.querySelectorAll("elem-class-1 > li > a");
for (let i = 0; i < elem1.length; i++) {
elem1[i].addEventListener("click", funcClick1);
}
for (let i = 0; i < elem2.length; i++) {
elem2[i].addEventListener("click", funcClick2);
}
for (let i = 0; i < elem3.length; i++) {
elem3[i].addEventListener("click", funcClick3);
}
function funcClick1(e) {
...
}
function funcClick2(e) {
...
}
function funcClick1(e) {
...
}
Само собой напрашивается решение для обработки querySelectorAll и тут я делаю такое:
function handlerSelectors (paramElem, paramHandler) {
for (let i = 0; i < paramElem.length; i++) {
paramElem= paramElem[i];
paramElem.addEventListener(paramHandler)
}
}
Чтобы просто собирать селекторы тогда когда мне нужно и подписывать на клик, используя нужный обработчик:
handlerSelectors(elem1, funcClick1);
handlerSelectors(elem2, funcClick2);
handlerSelectors(elem3, funcClick3);
Тоска начинает одолевать в тот момент, когда данной функцией я пробегаюсь по 2+ элементам. Например, если у меня есть:
<ul class="elem-class-1">
<li><a href="#">Пункт 1</a></li>
<li><a href="#">Пункт 2</a></li>
<li><a href="#">Пункт 3</a></li>
</ul>
И я использую ту самую функцию, то получаю только первый ul li a, а хочется все.
Подскажите пожалуйста, что я делаю не так?
Внесено много правок от опечаток до названия функций.
Но формируя функцию таким образом Вы привязываете ко всем нажатиям элементов с тегом "a" одно и тоже действие. (Ко всем нажатиям элементов с тегом a
класса .elem-class-1
привязываете одно и тоже действие - в примере вывод 123
, для всех элементов a
класса .elem-class-2
вывод функции 2
и так далее.)
Пример:
let elem1 = document.querySelectorAll(".elem-class-1 > li > a");
let elem2 = document.querySelectorAll(".elem-class-2 > li > a");
let elem3 = document.querySelectorAll(".elem-class-3 > li > a");
function handlerSelectors (paramElem, paramHandler) {
paramElem = Array.from(paramElem);
for (let i = 0; i < paramElem.length; i++) {
elem = paramElem[i];
elem.addEventListener('click', paramHandler)// Но таким образом Вы привязываете ко всем нажатиям элементов с тегом "a" одно и тоже действие.
}
}
function funcClick1(e) {
console.log('123');
}
function funcClick2() {
console.log('3');
}
function funcClick3() {
console.log('345');
}
handlerSelectors(elem1, funcClick1);
handlerSelectors(elem2, funcClick2);
handlerSelectors(elem3, funcClick3);
<ul class="elem-class-1">
<li><a href="#">Пункт 1</a></li>
<li><a href="#">Пункт 2</a></li>
<li><a href="#">Пункт 3</a></li>
</ul>
<ul class="elem-class-2">
<li><a href="#">Пункт 1</a></li>
<li><a href="#">Пункт 2</a></li>
<li><a href="#">Пункт 3</a></li>
</ul>
<ul class="elem-class-3">
<li><a href="#">Пункт 1</a></li>
<li><a href="#">Пункт 2</a></li>
<li><a href="#">Пункт 3</a></li>
</ul>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
На Авито (добавление объявления) при выборе адреса на карте метка движется вместе с курсором (по центру)Я пытаюсь повторить тоже самое , но не совсем...
Число называется счастливым если при складывании, суммы обеих сторон числа ровны друг другуНа пример։A=1230 считается счастливым потому что...
Найти наибольший общий делитель двух натуральных чисел:
Я подключил barba js(второй версии) и gsap через cdn: