Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.05.2021, 18:17
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Событие на родительском при клике по дочернему элементу
Приветствую. Есть условно элемент-кнопка:
<button><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14">//некий путь</svg></button>

Как вижу, в JS событие button.addEventListener( "click" , () => alert('Спасибо!')); срабатывает только непосредственно на элемент button. А вот если курсор находится над SVG, то ожидаемое событие не срабатывает.

В jQuery же, событие click срабатывает и при клике по кнопке button и при клике на дочерний SVG.

Подскажите, как в JS сделать такое же поведение, что и на jQuery? Неужели только через closest?
Ответить с цитированием
  #2 (permalink)  
Старый 01.05.2021, 18:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Янковиц
Как вижу,
Цитата:
какие ваши доказательства?
Ответить с цитированием
  #3 (permalink)  
Старый 01.05.2021, 18:47
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

На тестовом скрипте так работает. Просто, если я добавляю внутрь button svg, то клик срабатывает только если курсор находится на поле padding этой кнопки. Если над svg, то почему-то не срабатывает.
Ответить с цитированием
  #4 (permalink)  
Старый 01.05.2021, 18:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Янковиц,
где нерабочий код?
<!DOCTYPE html>

<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
<style type="text/css">
svg{
    background-color: #FF0000
}

</style>
    <script>
document.addEventListener( "DOMContentLoaded" , function() {
document.querySelector("button").addEventListener( "click" , () => alert('Спасибо!'));
  });
    </script>
</head>

<body>
<button><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"  >//некий путь</svg></button>


</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 01.05.2021, 18:57
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Наверно, я не правильно задал вопрос. Да, клик действительно отрабатывает. Точнее будет так сказать:
$( 'button' ).click(function() {
  var data = $( this ).data( 'text' );
  // и здесь некоторые действия на основании атрибута data
});

В JQuery мне не нужно проверять на каком я элементе. Здесь я точно знаю, что this это button, даже если у него много дочерних элементов. А вот в JS придётся же обращаться к возможному родителю, чтобы точно работать с кнопкой?

Последний раз редактировалось Янковиц, 01.05.2021 в 19:03.
Ответить с цитированием
  #6 (permalink)  
Старый 01.05.2021, 19:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Янковиц
А вот в JS придётся же обращаться к возможному родителю, чтобы точно работать с кнопкой?
<!DOCTYPE html>

<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
<style type="text/css">
svg{
    background-color: #FF0000
}

</style>
    <script>
document.addEventListener( "DOMContentLoaded" , function() {
document.querySelector("button").addEventListener( "click" , function() {
   alert(this.dataset.text);
});
  });
    </script>
</head>

<body>
<button  data-text="Спасибо!"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"  >//некий путь</svg></button>


</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 01.05.2021, 19:09
Профессор
Отправить личное сообщение для Янковиц Посмотреть профиль Найти все сообщения от Янковиц
 
Регистрация: 17.11.2014
Сообщений: 403

Спасибо, что прояснил вопрос
Ответить с цитированием
  #8 (permalink)  
Старый 01.05.2021, 19:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Янковиц,
не используйте стрелочные функции, если есть недопонимание про this
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрытие меню при клике "Вне" Tipylja Общие вопросы Javascript 2 14.10.2018 21:40
Смена изображений при наведении и фиксация при клике Noonf Общие вопросы Javascript 3 20.01.2018 17:18
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
При клике на ссылку ничего не происходит gurg0n Элементы интерфейса 2 24.06.2013 11:11
Вопрос по jquery. Как запретить один из скриптов при клике vuler Общие вопросы Javascript 1 07.03.2012 22:35