щелчок мышью где-то еще на странице (не на определенном div) - PullRequest
12 голосов
/ 09 августа 2010

Я хочу закрыть маленькое всплывающее окно на странице, когда пользователь щелкнул мышью в любом месте страницы, кроме области окна. как его найти?

Ответы [ 4 ]

17 голосов
/ 09 августа 2010
$(document.body).click(function(e){
   var $box = $('#little-pop-up-box-id');
   if(e.target.id !== 'little-pop-up-box-id' && !$.contains($box[0], e.target))
      $box.remove();
});

e.target - это DOM node, который получил click event. Сначала я проверяю, является ли ID этого элемента , а не тем, который мы ищем.

Вторая проверка !$.contains($box[0], e.target) гарантирует, что DOM node of invocation не является в элементе, который мы хотим скрыть.

Ну, я думаю, пришло время для плагинов! :

(function($){
   $.fn.outside = function(ename, cb){
      return this.each(function(){
         var $this = $(this),
              self = this;
         $(document.body).bind(ename, function tempo(e){
             if(e.target !== self && !$.contains(self, e.target)){
                cb.apply(self, [e]);
                if(!self.parentNode) $(document.body).unbind(ename, tempo);
             }
         });
      });
   };
}(jQuery));

Синопсис

$('#container').outside('click', function(e){
    $(this).remove();
});

Пример:

http://www.jsfiddle.net/qbDKN/30/

4 голосов
/ 09 августа 2010

@ Решение Энди хорошо, но я хотел бы упомянуть плагин Бена Алмана "Внешние события" .Вот краткий пример его использования:

$("#popup").bind("clickoutside", function(event){
  $(this).hide();
});
0 голосов
/ 09 августа 2010
$("html").click(function(){
//close popup
});
0 голосов
/ 09 августа 2010

Захватите событие глобального щелчка или установите прозрачный div 100% / 100% во всплывающем окне с таким событием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...