简体   繁体   English

在 onClick 事件上标记 not working on pure javascript

[英]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 */
});

I have created a fiddle for reference.我创建了一个小提琴供参考。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM