Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.12.2021, 00:24
Аспирант
Отправить личное сообщение для Alexander3928 Посмотреть профиль Найти все сообщения от Alexander3928
 
Регистрация: 19.05.2021
Сообщений: 75

Вопросы со скриптом
Добрый вечер.
Есть скрипт который при нажатии на кнопку заменяет url адрес для всех картинок, другими словами изображение. К скрипту вопросов нету он работает, как нужно. У меня больше теоретические вопросы.

Вот HTML разметка

<body>
    <div class="main-box">
        <div class="box">
            <button class="button">GO-1</button>
        </div>
        <div class="box">
            <img src="https://picsum.photos/300/100?1" class="image">
            <img src="https://picsum.photos/300/100?2" class="image">
            <img src="https://picsum.photos/300/100?3" class="image">
        </div>
    </div>
</body>


Вот скрипт
document.addEventListener("DOMContentLoaded", function() {
            const arr_url = [
                ["https://picsum.photos/300/100?4"],
                ["https://picsum.photos/300/100?5"],
                ["https://picsum.photos/300/100?6"]
            ];
            const main_box = document.querySelectorAll(".main-box");
            main_box.forEach(box => box.addEventListener("click", urlImage));
            function urlImage(e) {
                let button = e.target.closest(".button");
                if (button) this.querySelectorAll(".image").forEach((img, i) => img.src = arr_url[i]);
            };
        });




Вопросы связанные с этим участком кода
сonst main_box = document.querySelectorAll(".main-box");
main_box.forEach(box => box.addEventListener("click", urlImage));


Сперва достается див общий это понятно и вешается метод forEach на него. Сами вопросы заключаются

1)Как forEach понимает что есть элемент с классом box, если я не доставал его используя document.querySelector, может это аргумент или атрибут я не знаю?
2) Зачем на тот же box давать событие клика? если клик происходит по кнопке. В чем идея давать клик по элементу который просто используется как можно сказать ящик где хранятся все картинки.

Последний раз редактировалось Alexander3928, 14.12.2021 в 00:28.
Ответить с цитированием
  #2 (permalink)  
Старый 14.12.2021, 01:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Alexander3928
В чем идея
Делегирование событий
Ответить с цитированием
  #3 (permalink)  
Старый 14.12.2021, 01:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Alexander3928
Как forEach понимает что есть элемент с классом box,
никак, <div class="box"> в скрипте не участвует , box это <div class="main-box">
есть родитель -- в родителе кнопка и картинки, чтоб не искать по кнопке родителя а потом в родителе картинки , берём родителя и отслеживаем по какому элементу был клик, если по кнопке ищем внутри родителя картинки и меняем src. this.querySelectorAll(".image") this это родитель <div class="main-box">
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форум "Общие вопросы Javascript" превратился в помойку Max Power Сайт Javascript.ru 17 25.11.2016 04:35
Помогите, пожалуйста, со скриптом для баннера vladimir003 Общие вопросы Javascript 1 05.08.2016 05:32
При запуске теста вопросы в произвольеном порядке Dr.Maksss Элементы интерфейса 13 30.09.2015 21:53
Возникли вопросы по созданию игры на javascript alex510i Общие вопросы Javascript 3 19.09.2013 16:46
Взаимодействие со скриптом на протяжении его выполнения Malgin AJAX и COMET 6 23.08.2010 22:39