Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отловить событие клика (https://javascript.ru/forum/events/86134-otlovit-sobytie-klika.html)

ureech 27.10.2024 10:23

Отловить событие клика
 
Всем привет. На сайте нужно сделать функционал, один из элементов,это отлов внешних ссылок. И что не выходит все ссылки отлавливать. Некоторые никак не реагируют на код. Не понимаю с чем это связанно. Вот код
var a = document.querySelectorAll("a");
for (var i = 0; i < a.length; i++) {
a[i].onclick = function (e) {
console.log(a[i])
}
}


До клика, все ссылки в логе есть. Если ссылка на сайте прописана в тексте статьи, например, то такая ссылка реагирует на код, а если, скажем в меню, то нет. Ссылки у которых в href javascrupt:; в расчёт не беру.
Вот страница сайта
https://bolgow.ru/articles/11-obsche...ogo-opyta.html
В тексте есть ссылка на яндекс. Она "работает", а в меню ссылка на тот же яндекс, нет.
В чём дело может быть?

Белый шум 27.10.2024 13:20

ureech,
https://learn.javascript.ru/introduc...deventlistener

ureech 27.10.2024 13:54

Спасибо.Хоть дело и не в этом, но это помогло понять причину. Дело в структуре. В некоторых ссылках нет target.host

voraa 28.10.2024 07:40

Вы там в обработчике клика используете e.target. Но target это не тот же элемент на котором висит обработчик, а тот элемент, по которому кликнули. Если там конструкция
<a href="...">
    <span>Яндекс</span>
</a>

то target - это <span>, а <a>.
Если нужен именно элемент, на котором установлен обработчик, то используйте this

Aetae 28.10.2024 07:49

Во-первых: приведённый код вообще работать не будет - используется var, а потому i на момент клика всегда будет равна a.length.

Во-вторых: если же вы где-то там у себя уже поправили на использование target, надо было дальше читать по приведённой Белый шум ссылке - вам нужен currentTarget. Почему - объяснил voraa.


Часовой пояс GMT +3, время: 10:33.