2010-11-09 72 views
0

我有一個div,我想隱藏點擊它之外。jQuery身體點擊問題

它幾乎可以工作,除了按鈕類每兩次只更改一次。

我點擊按鈕,添加活動按鈕類,下拉滑落,我點擊下拉外的某個地方,它向上滑動,按鈕類返回到原始狀態。但是,當我重複這一點時,不添加按鈕類「isActive」。

這裏的功能:

function toggleSelectGroupList(){ 
    $('#groupListSortby').slideToggle(30); 


    $('body').click(function(){ 
     $('#groupListSortby').click(function(e) { e.stopPropagation(); }) 
     $('#groupListSortby').hide(); 
     $('.sortFriends .btngrey .gfx').toggleClass('isActive'); 
     $('.sortFriends .btngrey a').toggleClass('isActive'); 
    }); 
} 

標記:

<div class="sortFriends"> 

<div class="btngrey"> 
    <span class="gfx"></span> 
    <a onClick="toggleSelectGroupList()">All friends</a> 
</div> 

<div class="dropdownList" id="groupListSortby"> 
    <ul> 
     <li class="isActive"> 
      <span class="gfx"></span> 
      <a href="#">All friends</a> 
     </li> 
     <li> 
      <a href="#">Recently added</a> 
     </li> 
     <li class="last"> 
      <a href="#">The Railers</a> 
     </li> 
    </ul> 
</div> 

</div> 

回答

0

你應該從一開始就綁定你click處理程序和傳播停止,應立即勢必爲好,這樣的整體:

$(function() { 
    $(".sortFriends .btngrey a").click(function(e) { 
    $('#groupListSortby').slideToggle(30); 
    $('.sortFriends .btngrey .gfx, .sortFriends .btngrey a').toggleClass('isActive'); 
    e.stopPropagation(); 
    }); 
    $('#groupListSortby').click(function(e) { 
    e.stopPropagation(); 
    }); 
    $('body').click(function(){ 
    $('#groupListSortby').hide(); 
    $('.sortFriends .btngrey .gfx, .sortFriends .btngrey a').removeClass('isActive'); 
    }); 
}); 

一致,您應該<a>沒有一個onclick內嵌本不過,這隻會這樣做:

<div class="btngrey"> 
    <span class="gfx"></span> 
    <a href="#">All friends</a> 
</div> 

You can test it out here

+0

它的工作原理!一個問題,雖然,我有一個輸入字段,並點擊它時,div不滑動? – 2010-11-09 14:42:58

+0

@Johan - 我沒有跟隨,''字段在哪裏?(並且* id *有一個'return false'或'stopPropagation( )一路上?) – 2010-11-09 14:52:30

0

你能張貼的HTML代碼? 這可能是你隱藏了比你想要的更多的元素。或者爲什麼你有這麼多的選擇器:'.sortFriends .btngrey .gfx'

0

這個問題可能是你將點擊處理程序附加到另一個點擊事件的正文中,並且在你正在附加另一個事件的正文單擊事件中。每次點擊都會發生這種情況。你確定要這麼做嗎?嘗試在$(window).load中附加事件。

0

刪除從toggleSelectGroupList函數的函數,並在$把(文件)。就緒(函數() ...

$('body').click(function(){ 
    $('#groupListSortby').click(function(e) { e.stopPropagation(); }) 
    $('#groupListSortby').hide(); 
    $('.sortFriends .btngrey .gfx').toggleClass('isActive'); 
    $('.sortFriends .btngrey a').toggleClass('isActive'); 
});