2013-10-03 26 views
0

问题是当搜索页面打开时,所有链接都处于非活动状态。所以,我发现问题来形成这个jQuery代码:如果我添加//返回false返回false - 阻止页面上的所有链接

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;我的搜索栏正在隐藏,然后再次打开。那么解决方案是什么?

+0

你能提供的jsfiddle? –

+0

什么是HTML结构? –

+0

在小提琴中,它会工作得很好......问题在于prestashop搜索页面,因为它使用AJAX和其他JS代码。所以这一些如何得到CONFLICT。但是,如果删除RETURN FALSE,除了隐藏和显示功能之外,它会变得很好。 – AndrewS

回答

1

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

只有这样,你已经证明可以防止被跟踪链接,如果他们中是#search和/或元素将是代码。如果是这样的问题,就可以解决这个问题是这样的:

$('#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; 
    } 
}); 

(同样地,对于。)

...这只有在点击是不是a元素上运行的相关代码。

注:上述假定#search和都没有,本身,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 
+0

谢谢你的回答。那么有一些+,但也是一个 - 。如果(!$(e.target).closest('a')[0]){事件点击不起作用。不开放,不关闭!但是,页面上的链接现在处于活动状态。那么,为什么功能事件不起作用? – AndrewS

+0

@AndrewS:你看到最后一点了吗?这可能是...如果不是,它会是类似的东西。从根本上说,你只是想确保你没有处理一个点击,如果点击通过一个链接传递到这些元素,但你*否则不想。 :-) –

相关问题