Как предотвратить привязку по умолчанию, которая имеет дочерний элемент.Я использую делегат события, так как ссылка устанавливается динамически.
Когда пользователь щелкает, я должен проверить, есть ли у него data-applink
в привязке, в этом случае я перехожу, используя closest
, чтобы найти его родителя (поскольку событие click обнаружит дочерний элемент, а не якорь).
После того, как я получу родителя, я добавлю событие click и предотвратим его сбой.Но как-то не получается.
Пожалуйста, помогите, есть идеи?
//simulate ajax
setTimeout(()=> {
const anchor = document.querySelectorAll('.anchor')[0];
anchor.setAttribute("href", "http://www.google.com");
anchor.setAttribute("data-applink", "app://link.id");
},800);
const checkNesting = (selector, event, callback) => {
let elem = event.target;
if (elem.matches(selector)) {
callback(elem);
}else{
elem = event.target.closest(selector);
if (elem) {
// console.log(elem);
callback(elem);
}
}
}
document.body.addEventListener('click', (event) => {
checkNesting('*[data-applink]', event, (el) => {
el.addEventListener('click', (ev) => {
ev.preventDefault();
});
});
});
<a href="#" class="anchor">
<button>Click Here</button>
</a>