Событие на родительском при клике по дочернему элементу
Приветствую. Есть условно элемент-кнопка:
<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? |
Цитата:
Цитата:
|
На тестовом скрипте так работает. Просто, если я добавляю внутрь button svg, то клик срабатывает только если курсор находится на поле padding этой кнопки. Если над svg, то почему-то не срабатывает.
|
Янковиц,
где нерабочий код?
<!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>
|
Наверно, я не правильно задал вопрос. Да, клик действительно отрабатывает. Точнее будет так сказать:
$( 'button' ).click(function() {
var data = $( this ).data( 'text' );
// и здесь некоторые действия на основании атрибута data
});
В JQuery мне не нужно проверять на каком я элементе. Здесь я точно знаю, что this это button, даже если у него много дочерних элементов. А вот в 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>
|
Спасибо, что прояснил вопрос :)
|
Янковиц,
не используйте стрелочные функции, если есть недопонимание про this |
| Часовой пояс GMT +3, время: 22:56. |