Я хочу закрыть немного всплывающего окна на странице, когда пользователь нажал где угодно на странице кроме области поля. как найти его?
$(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
, который получил событие щелчка
. Сначала я проверяю, соответствует ли ID
этого элемента не тот, который мы ищем.
Вторая проверка ! $. Contains ($ box [0], e.target)
проверяет, что узел DOM вызова
не находится внутри ] элемент, который мы хотим скрыть.
Что ж, я думаю, пора плагин! :
(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();
});
Пример:
Решение @jAndy хорошее, но я также хотел упомянуть плагин Бена Алмана «Внешние события» . Вот краткий пример его использования:
$("#popup").bind("clickoutside", function(event){
$(this).hide();
});
Захватите глобальное событие щелчка или настройте прозрачный div 100% / 100% под всплывающим окном с таким событием.