【发布时间】:2018-12-07 07:33:19
【问题描述】:
如何防止具有子元素的默认锚点。我使用事件委托点击,因为链接是动态设置的。
当用户点击时,我必须检查它是否在锚点中有data-applink,在这种情况下,我使用closest 遍历找到它的父元素(因为点击事件会检测到子元素,而不是锚点)。
获得父节点后,添加点击事件并防止默认。但不知何故,它不起作用。
请帮忙,有什么想法吗?
//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>
【问题讨论】:
标签: javascript ajax preventdefault