在jQuery函数之后遇到页面重载问题

时间:2012-07-10 13:57:13

标签: jquery

我一直在努力解决这个问题,但我无法提出解决方案。我有一个简单的jQuery函数,可以在菜单的菜单上淡入和淡出内容元素。时尚运作完美,但当它运行时,页面重新加载并跳回到顶部。我在这里找到了各种建议的解决方案,但没有一个能奏效。我使用了返回假;和e.preventDefault();以及搞乱链接HTML将其更改为跨度和按钮但没有一个正常工作。它在Wordpress上的自定义主题这里是我的HTML。

<div id="menu_nav">

<ul>
<li><a href="#" id="mainattraction" class="current-link menu-link">Main Attractions</a></li>
    <li><a href="#" id="seafoodcombos" class="menu-link">Seafood Combo's</a></li>
<li><a href="#" id="harbouronaroll" class="menu-link">Harbour On A Roll</a></li>
<li><a href="#" id="meangreens" class="menu-link">Mean Greens</a></li>
<li><a href="#" id="appetizers" class="menu-link">Appetizers</a></li>
<li><a href="#" id="kidsmenu" class="menu-link">Kids Menu</a></li>
<li><a href="#" id="onthegrill" class="menu-link">On The Grill</a></li>
<li><a href="#" id="soups" class="menu-link">Soups</a></li>
</ul>

</div>

<div id="mainattractionscontent">
//content
</div>

<div id="seafoodcomboscontent">
//content
</div>

等。等

这是我目前正在使用的jQuery。

 $('document').ready(function() {

    $('.menu-link').click(function(event) {
        var id = this.id + 'content';
        var link = this.id;
        $('.active').fadeOut(600, function(){
            $('#' + id).fadeIn(600);
            $('.active').removeClass('active');
            $('#' + id).addClass('active');
            $('.current-link').removeClass('current-link');
            $('#' + link).addClass('current-link');
            return false;
       }); 
    });

 });

您还可以查看http://theharboursportsbar.com/the-menu页面以获取参考。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

return false;需要位于“点击”处理程序中,而不是淡出回调。

$('.menu-link').click(function(event) {
    var id = this.id + 'content';
    var link = this.id;
    $('.active').fadeOut(600, function(){
        $('#' + id).fadeIn(600);
        $('.active').removeClass('active');
        $('#' + id).addClass('active');
        $('.current-link').removeClass('current-link');
        $('#' + link).addClass('current-link');
   }); 
   return false;
});

调用event.preventDefault();也会起作用,但它应该再次发生在“click”处理程序中,而不是动画回调。

答案 1 :(得分:0)

实际上并不是链接的默认属性。 Pointy是正确的,你应该在点击处理程序之外移动返回false,但这不是这里的实际问题。

当您淡出内容时,页面会变得更小,足够小,以至于大多数显示器/视口上的所有内容都可以放在一个页面上,因此它实际上是“跳跃”到顶部,而实际上,它只是显示所有可用的内容。所以基本上你的问题在于fadeOut函数本身的性质,在fadeOut函数的末尾它设置display:'none'影响页面的布局。

请改为尝试:

$('.menu-link').click(function(event) {
    var id = this.id + 'content';
    var link = this.id;
    $('.active').animate({opacity:0},{duration:600, complete:function(){
        $('#' + id).css('display','block').animate({opacity:1},{duration:600});
        $('.active').removeClass('active').css('display','none');
        $('#' + id).addClass('active');
        $('.current-link').removeClass('current-link');
        $('#' + link).addClass('current-link');
    }}); 
    return false;
});