2013-10-03 36 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:你看到最後一點了嗎?這可能是...如果不是,它會是類似的東西。從根本上說,你只是想確保你沒有處理一個點擊,如果點擊通過一個鏈接傳遞到這些元素,但你*否則不想。 :-) –

相關問題