2010-08-09 19 views

cevap

17
$(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.targetclick event alınan DOM node olup. Bu elemanın ID aradığımızı kontrol edip etmediğini kontrol ediyorum.

ikinci çek !$.contains($box[0], e.target)DOM node of invocation biz gizlemek istemiyor eleman dahilinde olduğundan, emin olur.

Eh, sanırım eklenti zamanı! :

(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)); 

özet

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

Örnek:

pop-up altında

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

+0

Bu iyi bir çözümdür - gerçi sadece iki hızlı yorumlar. Yeniden sorgulamadan (ucuz bir sorgu da olsa) kaçınmak için tıklama işleyicisi dışındaki $ box değişkenini önbelleğe almak muhtemelen mantıklı olacaktır. Ve jQuery'nin 1.3.2+ sürümünü kullanıyorsanız,! $ (E.target) .closest ('# küçük-pop-up-box-id') uzunluğu, daha kısa ve özlü bir koşul olacaktır./nitpicking – jmar777

+0

ACHHHH !! ÇOCUK ZİNCİRİ - BROKEN! (aksi halde ... tatlılık, +1). Ayrıca ... 'click' kelimesi, ename var ile değiştirilmeli mi? – jmar777

+0

@ jmar777: doğru, düzeltildi: p. Ben de bir .unbind() 'ekledim. Sanırım bu birkaç yerde optimize edilebilir. Belki de .delegate() 'yi kullanmak için iyi bir fikir. FBI'ın Ben Alman'a kimin ihtiyacı var? :) j/k – jAndy

0

Kepçe küresel tıklama etkinliği veya kurulum şeffaf div% 100 /% 100 Böyle bir olay ile kutu.

4

@ jAndy'nin çözümü iyi, ama ben de Ben Alman's "Outside Events" plugin'dan bahsetmek istedim. İşte bunu kullanarak hızlı bir örnek:

$("#popup").bind("clickoutside", function(event){ 
    $(this).hide(); 
}); 
0
$("html").click(function(){ 
//close popup 
}); 
İlgili konular