0

问题是当搜索页面打开时,所有链接都没有激活。所以,我发现问题来自这个 JQUERY 代码:

var shouldShow = $.cookie('show_desc') == 'yep';
            if( shouldShow ) { $('#searchunder').show(); $('body').animate({ paddingTop: 80 }); }
            else {             $('#searchunder').hide(); $('body').animate({ paddingTop: 25 }); }

        // shows the group_desciption on clicking the noted link
        $('#search').click(function() {
            $('body').animate({ paddingTop: 80 });
            $('#searchunder').show('fast');
            $.cookie('show_desc', 'yep');
            return false;
        });
        // hides the group_desciption on clicking the noted link
        $('#close').click(function() {
            $('body').animate({ paddingTop: 25 });
            $('#searchunder').hide('fast');
            $.cookie('show_desc', 'nope');
            return false;
        });

如果我添加//return false; 链接正在工作。但是如果我删除return false; 我的搜索栏被隐藏,然后再次打开。那么解决方案会是什么?

4

1 回答 1

1

在 jQuery 处理程序中,return false做两件事:停止传播并阻止默认操作。

您显示的代码可以阻止链接被跟踪的唯一方法是它们是否在and#search /or#close元素中。如果这是问题,您可以像这样解决它:

$('#search').click(function() {
    if (!$(e.target).closest('a')[0]) { // Check if click was on `a` element
        $('body').animate({ paddingTop: 80 });
        $('#searchunder').show('fast');
        $.cookie('show_desc', 'yep');
        return false;
    }
});

(同样适用于#close。)

...如果单击不在a元素上,则仅运行相关代码。

注意:以上假设#search并且#close它们本身不是a元素,并且它们不在元素 a。例如,它们包含链接,但不是链接也不包含链接中。这也可以解决,它只需要更多的代码:而不是

if (!$(e.target).closest('a')[0]) { // Check if click was on `a` element

这将是

if (!$(e.target).parentsUntil(this).filter('a')[0]) { // Check if click went through an `a` element en route to us
于 2013-10-03T11:55:21.823 回答