Я пытаюсь реализовать простой (-ish) маршрутизатор в качестве упражнения. Тем не менее, у меня возникают проблемы с обнаружением привязки кликов. В идеале я хотел бы перехватить событие в любое время, когда URL-адрес изменится (без использования хэшей), но на данный момент я просто хочу, чтобы можно было перехватить любое событие щелчка якоря.Слушайте все события «onClick» из тегов привязки, которые могут содержать детей
Вот что я пытался до сих пор:
HTML
<nav id="mainMenu">
<ul id="navlinks">
<li>
<a href="/">
<span>HOME</span>
</a>
</li>
<li>
<a href="/posts">
<span>POSTS</span>
</a>
</li>
</ul>
</nav>
Отдельные JS файл
function intercept(event)
{
console.log("triggered");
var tag = event.target;
if (
tag.tagName.toUpperCase() === 'A' &&
tag.href &&
event.button == 0 &&
tag.origin == document.location.origin
){
event.preventDefault();
console.log("default prevented")
}
}
С помощью этого кода я только обнаружения span
событий, а не <a>
событий. Что я могу сделать, чтобы обнаружить события привязки якоря, используя vanilla JS (если возможно)? Я хочу также иметь возможность обнаруживать динамически созданные якоря.
EDIT 1: Изменена функция JS. Консольные печатает default prevented: SPAN
:
function intercept(event)
{
console.log("triggered");
var tag = event.target;
//if (
// tag.tagName === 'A'
//){
event.preventDefault();
console.log("default prevented: " + tag.tagName);
//}
}
EDIT 2: Якорь теги не всегда будет иметь детей, а также возможные дети не могут быть span
.
комментария некоторые из ваших условных предикатов, пока он не работает, как ожидалось, то переделки состояния. – dandavis
Чтобы обнаружить попытки навигации, вы можете прослушивать перед загрузкой на теле. – dtanders
@dandavis Все мои условные обозначения исчезли. Он по-прежнему обнаруживает только промежуточные клики. –