需要关闭e.preventDefault();对于特定菜单链接

时间:2015-10-01 12:04:06

标签: jquery

我有一个滚动的页面,我正在使用以下内容来帮助滚动我的页面,一切都很棒但是e.preventDefault(); bit已停用需要用作普通超链接的菜单项之一,而不是滚动启动链接。我如何专门针对它并关闭e.preventDefault();影响?我在这个论坛上看到了一些类似的问题,但对我来说没有任何意义或帮助我的情况。任何协助都非常赞赏。

这是Easing Effects代码:

$('.nav').on('click', 'a', function(e) {           
    e.preventDefault();
    href = $(this).attr('href');
    $('html,body').stop().animate({ scrollTop: $(href).offset().top-  offsetTop }, 2500, 'easeInOutExpo');
    history.pushState({}, "", this.href);           
});

这是受影响的菜单。新闻链接是我需要正常运行的链接,并为其添加了一个类来定位它。

<ul id="nav" class="nav">
    <li><a href="#home">Home</a></li>
    <li><a href="#why">Why Us</a></li>                
    <li><a class="allowLinkToWork" href="news.html">News</a></li>
    <li><a href="#contact">Contact</a></li>
</ul>

我尝试过以下我认为可行的方法:     $('。nav a.allowLinkToWork [href ^ =“http”]')。unbind('click',handler);

4 个答案:

答案 0 :(得分:2)

您可以测试菜单项类名以检测它并避免preventDefault

$('.nav').on('click', 'a', function(e) {           
    var $this = $(this);
    if (!$this.hasClass('allowLinkToWork')) {
         e.preventDefault();    
    }
    href = $this.attr('href');
    $('html,body').stop().animate({ scrollTop: $(href).offset().top-  offsetTop }, 2500, 'easeInOutExpo');
    history.pushState({}, "", this.href);           
});

答案 1 :(得分:2)

您可以使用hasClass()标识要允许点击的元素,然后不应用preventDefault()。试试这个:

$('.nav').on('click', 'a', function(e) {           
    if (!$(this).hasClass('allowLinkToWork'))
        e.preventDefault();

    // your code...     
});

答案 2 :(得分:1)

如果您需要停用整个功能,请关注@ haim770回答

$('.nav').on('click', 'a:not(.allowLinkToWork)', function(e) {
    ...
};

如果您只需要取消激活e.preventDefault()位,请执行以下操作:

$('.nav').on('click', 'a', function(e) {           
    if (!$(this).hasClass('allowLinkToWork')) { // changed
        e.preventDefault();
    } // changed
    href = $(this).attr('href');
    $('html,body').stop().animate({ scrollTop: $(href).offset().top-offsetTop }, 2500, 'easeInOutExpo');
    history.pushState({}, "", this.href);           
});

答案 3 :(得分:0)

最短的解决方案就是不要在所需链接上绑定任何事件,替换此处

$('.nav').on('click', 'a:not(.allowLinkToWork)', function(e)