return false - 阻止页面上的所有链接

时间:2013-10-03 11:50:34

标签: jquery cookies prestashop

问题是当搜索页面打开时,所有链接都不活动。所以,我发现问题出现在这个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;
        });

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

1 个答案:

答案 0 :(得分:1)

在jQuery处理程序中,return false执行两项操作:停止传播并阻止默认操作。

您显示的代码阻止链接的唯一方法就是 #search和/或#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元素,而且 <{em> <{em>} 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