2013-04-24 270 views
4

我試圖在單擊鏈接時顯示#subscribe-pop div,並在單擊任何位置時隱藏它。我可以得到它的顯示和隱藏,如果我改變:顯示div一旦點擊後隱藏,當點擊外部時隱藏

$('document').click(function() { 

TO

$('#SomeOtherRandomDiv').click(function() { 

HTML:

<div id="footleft"> 
    <a href="#" onclick="toggle_visibility('subscribe-pop');">Click here to show div</a> 
    <div id="subscribe-pop"><p>my content</p></div> 
</div> 

腳本:

<script type="text/javascript"> 
    function toggle_visibility(id) { 
     var e = document.getElementById("subscribe-pop"); 
     if(e.style.display == 'block') 
      e.style.display = 'none'; 
     else 
      e.style.display = 'block'; 
     } 
    } 

    $('document').click(function() { 
     $('#subscribe-pop').hide(); //Hide the menus if visible 
    }); 

    $('#subscribe-pop').click(function(e){ 
     e.stopPropagation(); 
    }); 
</script> 
+2

http://stackoverflow.com/questions/152975/how-to-detect-a-click-outside-an-element – 2013-04-24 13:36:39

+0

使用'$(document)',而不是'$('document')' – Ian 2013-04-24 13:50:51

回答

12

你必須停止活動在你的容器中傳播(在這種情況下是'footleft'),所以父元素不會注意到事件被觸發。

事情是這樣的:

HTML

<div id="footleft"> 
    <a href="#" id='link'>Click here to show div</a> 
    <div id="subscribe-pop"><p>my content</p></div> 
</div> 

JS

$('html').click(function() { 
    $('#subscribe-pop').hide(); 
}) 

$('#footleft').click(function(e){ 
    e.stopPropagation(); 
}); 

$('#link').click(function(e) { 
    $('#subscribe-pop').toggle(); 
}); 

看到它的工作here

+0

真棒,這很好,謝謝你(和其他人)的回覆:) – rizzledon 2013-04-25 00:52:46

+0

理解,但仍然在我身邊工作,即使形成。 [試試看](http://jsfiddle.net/4yBGt/2/)。另外,確保你的html是有序的。如果這樣做,不要忘記檢查這個答案作爲解決方案。 :) – 2013-04-25 12:05:24

+0

謝謝你,我的html被搞砸了.. – rizzledon 2013-04-25 12:26:16

-1

更改$(document).click()$('html').click()應該解決是主要問題。

其次,你不需要toggle_visibility()功能可言,你可以簡單地做:

$('#subscribe-pop').toggle(); 

編號:改變bodyhtml按照這樣的回答:How do I detect a click outside an element?

1

我認爲提問者試圖完成一個div的jquery模式類型的顯示。

如果您想檢查此link,加載頁面會顯示一個模式div,將您的眼睛驅動到屏幕的中心,因爲它會調暗背景。

此外,我編了一個短的jsFiddle供您檢查。如果您可以按照您的要求使用jquery,那麼您也可以查看他們的網站。

這裏是代碼顯示或隱藏彈出的div

var toggleVisibility = function(){ 
    if($('#subscribe-pop').is(":not(:visible)")){ 
      $('#subscribe-pop').show(); 
     }else{ 
      $('#subscribe-pop').hide(); 
     } 
    }