2012-05-11 13 views
0

什麼我當前的代碼做: 我有這樣的HTML如何捕獲「身體」和內部「體」的活動頁面中的[jQuery的]

<li> 
    <span>Logged in as</span>&nbsp; 
    <a class="user" href="#"><?php echo $this->loggedas ?></a>&nbsp; 
    <a id="loginarrow" href="javascript: void(0);"></a> 
</li> 

這是我上面loginarrow ID

JS
$("#loginarrow").click(function() { 
    $("#logindrop").toggle("slow"); 
    return false; 
}); 

其工作很好,但我可以通過再次點擊關閉它。 我不想要所以我想,如果它打開,我點擊背景,所以它必須關閉。 對於我這樣做,

$("#loginarrow,body").click(function() { 
    $("#logindrop").toggle("slow"); 
    return false; 
}); 

現在它的工作很酷,卻得到了另一個問題。

1 =我在Page(Body)中有很多其他html元素,其中有其他事件可以調用.so在這種情況下,每當我點擊頁面中的其他元素,使其切換我的這個div loginarrow。

我想要相同的功能,但不在我的其他元素只在背景上。 任何提示

+0

請格式化您的代碼,以便我們不必滾動它來閱讀它。 – Alnitak

+0

確實在我的製作頁面中,我正在這樣做,這就是我正在做它 –

+0

@Alnitak現在格式化Zuul –

回答

2

只有當它可見時關閉它。

$("body").click(function() { 
    if ($("#logindrop").is(":visible")) 
     $("#logindrop").hide("slow");  
}); 
1

良好的瀏覽器性能的基本設計原則是隻捕獲事件,而你對它們感興趣。

所以就把#loginarrow元素在你的.click()處理程序,但在處理程序註冊的body,將其再次關閉一個一次性事件處理程序。喜歡的東西(未經測試):

$('#loginarrow').click(function() { 
    $('#logindrop').show('slow'); 
    $('body').one('click', function() { 
     $('#logindrop').hide('slow'); 
    }); 
    return false; 
}); 

這將確保你不會不必要攔截點擊body除非你真的需要。

請參閱http://jsfiddle.net/alnitak/vPHaj/

+0

先生,我認爲它會打開它,並將隱藏它比。 –

+0

它現在不。 – Alnitak

相關問題