views:

719

answers:

4

I'd like to hide a div when user click anywhere on the page outside of that div. How can I do that using raw javascript or jQuery?

+1  A: 

First idea, in raw javascript (from this post):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"&gt;
<html>
  <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta http-equiv="Content-Script-Type" content="text/javascript">
    <style type="text/css">
      <!--
      #mydiv{
        background-color: #999999;
        height: 100px;
        width: 100px;
      }
      -->
    </style>
    <script type="text/javascript">
      document.onclick=check;
      function check(e)
      {
        var target = (e && e.target) || (event && event.srcElement);
        var obj = document.getElementById('mydiv');
        if(target!=obj){obj.style.display='none'}
      }
    </script>
  </head>
  <body>
    <div id="mydiv">my div</div>
  </body>
</html>

Tested with IE6 and FireFox3.1, it does work as advertised.

VonC
+11  A: 

Attach a click event to the document to hide the div:

$(document).click(function(e) {
   $('#somediv').hide();
});

Attach a click event to the div to stop clicks on it from propagating to the document:

$('#somediv').click(function(e) {
   e.stopPropagation();
});
Eran Galperin
Thanks a lot! That worked just the way I wanted it to.
sumek
AFAIK, with jQuery in the second event handler you only need to "return false;" to stop the propagation. http://docs.jquery.com/Events/click (near the bottom of the page)
scunliffe
A: 

It sure sounds like you want a modal dialog. This jQuery plugin http://code.google.com/p/simplemodal/ looks like it has potential.

Eric Wendelin
A: 

If the div has the focus, you could attach to the onblur event.

Zoredache