Событие на клике везде на странице за пределами конкретного div

Я хотел бы скрыть div, когда пользователь нажимает в любом месте страницы за пределами этого div. Как это сделать, используя raw javascript или jQuery?

Ответ 1

Прикрепите событие клика к документу, чтобы скрыть div:

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

Прикрепите событие клика к элементу, чтобы остановить клики на нем от распространения на документ:

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

Ответ 2

Первая идея, в raw javascript (от этот пост):

<!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> 

Протестировано с помощью IE6 и FireFox3.1, он работает как рекламируемый.

Ответ 3

Кажется, что вам нужен модальный диалог. Этот плагин jQuery http://code.google.com/p/simplemodal/ выглядит как потенциальный.

Ответ 4

Если div имеет фокус, вы можете прикрепить к событию onblur.