Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 4

Как правильно задать событие по клику по элементу со вложенными элементами?

30.04.2020, 08:22. Показов 2718. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте.

На сайте контент заполняется карточками с продуктами из базы данных. Каждая карточка (див) содержит вложенные дивы: изображение и название продукта. Стоит задача: при клике на карточке развернуть описание продукта. Все, в принципе, работает, но... столкнулся с такой проблемой:
При клике на изображение или название клик не срабатывает.
Я понимаю, что, например, при клике на изображение event.target - это и есть то самое изображение.
Такой вопрос: может существует способ сделать так, чтобы вложенные дивы игнорировались, а событие срабатывало на всей карточке?
На всякий случай код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
 prodlist.addEventListener('click', function(event) {
            let target = event.target;
            if (target && target.classList.contains('product')) {
                for (let i = 0; i < product.length; i++) {
                    if (target == product[i]) {
                        hideProdContent(0);
                        showProdContent(i);
                        break;
                    }
                }
            }
 
        }, true);
Заранее благодарю!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2020, 08:22
Ответы с готовыми решениями:

Как сделать плавную прокрутку по клику в меню к элементу страницы?
Как сделать плавную прокрутку по клику в меню к элементу страницы? Напишите, пожалуйста, подробнее: Что, куда писать, от чего будет...

Как правильно задать http запрос, если нужно задать reqest header?
В программе нужно перезагрузить роутер, исспользуя httpanalazer получилось определить какой запрос я должен отослать - он на фото ...

Вставьте элемент, равный минимальному элементу всего массива, перед всеми элементами, равными максимальному элементу.
В консольном приложении реализуйте указанную задачу, используя одномерный массив целых чисел. Размерность исходного массива считывается с...

4
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
30.04.2020, 09:53
Лучший ответ Сообщение было отмечено Vladd117 как решение

Решение

Здравствуйте.
Заранее пожалуйста.
Вот так можно вытащить карточку товара, если обработчик события навешен на список товаров:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        #prodList {
            display: flex;
        }
 
        .product {
            height: 100px;
            width: 100px;
            border: 1px solid black;
        }
 
        .img,
        .description {
            height: 40px;
            border: 1px solid blue;
        }
    </style>
</head>
<body>
    <div id="prodList">
        <div class="product">
            <div class="img"></div>
            <div class="description">Гречка</div>
        </div>
        <div class="product">
            <div class="img"></div>
            <div class="description">Туалетная бумага</div>
        </div>
        <div class="product">
            <div class="img"></div>
            <div class="description">Макароны</div>
        </div>
    </div>
    <script>
        let prodlist = document.getElementById("prodList");
 
        prodlist.addEventListener('click', event => {
            let product = event.target.closest(".product");
            if (!product) return;
            alert(product.querySelector(".description").textContent);
        });
    </script>
</body>
</html>
2
0 / 0 / 0
Регистрация: 27.04.2020
Сообщений: 4
30.04.2020, 10:34  [ТС]
Огромное спасибо, все заработало как надо.
Понятие не имел про closest. Все перерыл, нигде не встречал... может не везло.
До этого навешивал обработчик на каждый элемент, клик иногда вообще срабатывал, если элемент в самом конце. Понимал, что есть какое-то правильное решение.
0
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
30.04.2020, 11:31
Цитата Сообщение от Vladd117
...может не везло.
https://learn.javascript.ru/event-delegation , например.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
30.04.2020, 11:38
DrType, closest - относительно свежий метод, пришедший из jQuery. Но были и полифиллы.
Там в принципе алгоритм был понятный, явно не два часа ломать голову.

Добавлено через 2 минуты
DrType, в учебнике не true hidden:
JavaScript
1
elem.hidden = !elem.hidden;
Так лучше не делать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2020, 11:38
Помогаю со студенческими работами здесь

Как обрабатывать событие по клику мыши и нажатию на кнопку на клавиатуре
Всем доброго времени суток ! Осваиваю обработку событий с клавиатуры . У меня получилось чтобы при нажатии Left Ctrl + S выводилось...

Создание div с его вложенными элементами
Добрый, компонент получает массив цветов, нужно сделать вот так &lt;div style={{border:&quot;solid 2px &quot; +...

Создать в цикле массив с вложенными элементами
Здравствуйте, столкнулся с проблемой, не получается создать массив с вложенными элементами с помощью цикла. есть массив var...

Триггеры для управления вложенными элементами
Здравствуйте. У меня есть listBox, в котором есть textBox с именем textBox1_1. Мне надо, чтобы при нажатии на listBoxItem фон textBox'a...

PyQt5 + Qt Designer. Как подключить событие к элементу?
Хочу выучить PyQt5. Еле как установил. Но теперь столкнулся с проблемой, нету уроков, или хотя бы документации. В тех уроках которые я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru