Thursday, March 3, 2011

Event on a click everywhere on the page outside of the specific div

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?

From stackoverflow
  • 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">
    <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.

  • 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();
    });
    
    sumek : Thanks a lot! That worked just the way I wanted it to.
    scunliffe : 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)
  • It sure sounds like you want a modal dialog. This jQuery plugin http://code.google.com/p/simplemodal/ looks like it has potential.

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

0 comments:

Post a Comment