我有一个滚动的页面,我正在使用以下内容来帮助滚动我的页面,一切都很棒但是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);
答案 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)