[英]tag a not working on pure javascript on onClick event
I've run into the following problem.我遇到了以下问题。 I made a landing page, made links to page sections through pure javascript, everything seems to be working, super.
我做了一个登陆页面,通过纯 javascript 链接到页面部分,一切似乎都有效,超级。 But, I wanted to add a regular <а></а> link and it turns out it doesn't work, I understand that the reason lies in event.preventDefault();
但是,我想添加一个常规的 <а></а> 链接,结果发现它不起作用,我知道原因在于 event.preventDefault(); but if this is removed, then the main script breaks
但是如果删除它,那么主脚本就会中断
document.querySelector('.nav').addEventListener("click", (event) => {
event.preventDefault();
let elementOffset = 0;
let parent = document.querySelector('.nav');
let menuItem = parent.querySelectorAll('.nav__link');
if(event.target.classList.contains('nav__link')) {
for (let i = 0; i < menuItem.length; i++) {
menuItem[i].classList.remove('active');
}
}
let elementId = event.target.getAttribute('data-scroll');
let element = event.target;
if(elementId && element){
elementOffset = getElementScrollOffset(elementId);
scrollToTop(elementOffset);
element.classList.add('active');
}
});
<div class="header__inner">
<div class="header__logo" data-scroll="#intro"></div>
<nav class="nav" id="nav">
<a class="nav__link active" href="#" data-scroll="#about">about</a>
<a class="nav__link" href="#" data-scroll="#services">services</a>
<a class="nav__link" href="#" data-scroll="#mods">Сmods</a>
<a class="nav__link" href="#" data-scroll="#updates">updates</a>
<a class="nav__link" href="#" data-scroll="#footer">Кfooter</a>
<a class="nav__link" href="https://www.google.com/" target="_blank">Discord</a>
</nav>
</div>
If you remove event.preventDefault();如果删除 event.preventDefault(); instead of going to it, it takes me to the top page.
它没有去它,而是把我带到了首页。 Yes, I understand that you can insert a link outside the.nav element, but I need it there.
是的,我知道您可以在 .nav 元素之外插入一个链接,但我需要它。 Help pls:)
请帮助:)
What you need to do in you click handler is to prevent the execution of the code if the clicked link is not an in-page anchor.如果单击的链接不是页内锚点,您需要在单击处理程序中执行的操作是阻止代码的执行。 You could do this by checking that the
href
of the clicked <a>
element is not equal to #
.您可以通过检查单击的
<a>
元素的href
是否不等于#
来做到这一点。 You could do this by modifying your handler as follows:您可以通过如下修改您的处理程序来做到这一点:
document.querySelector('.nav').addEventListener("click", (event) => {
if (event.target.getAttribute('href') !== '#') { return; }
/* rest of handler logic remains the same */
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.