2012-10-04 24 views
31

Olası Çoğalt:
How to detect a click outside an element?jQuery: başka bir yerde ayrı elemanın tıklama elemanı Hide

Ben kullanıcı dışında herhangi bir yerde tıklarsa bir 'div' gizler Bunu başarmak için çalışıyorum eleman üzerinde. Kullanıcının bir düğmeyi tıklatması durumunda aşağıdaki kodu kullanıyorum. Düğmenin tıklatılmasını istiyorum, eğer 'Ayrıntılar' öğesi görünürse, ekranın diğer bölümlerine tepki verir. Bir öğe odağı kaybetmeden olduğunda

$('.nav-toggle').click(function(){ 
     //get collapse content selector 
     var collapse_content_selector = $(this).attr('href'); 

     //make the collapse content to be shown or hide 
     var toggle_switch = $(this); 
     $(collapse_content_selector).toggle(function(){ 
      if($(this).css('display')=='none'){ 
          //change the button label to be 'Show' 
      toggle_switch.html('Show Details'); 
      }else{ 
          //change the button label to be 'Hide' 
      toggle_switch.html('Hide Details'); 
      } 
     }); 
    }); 
+0

muhtemelen iyi kendimi açıklamadı. Bu Turp http://jsfiddle.net/planxdesign/b9mLB/1/ Bu şu anda hallederim olarak koddur göz at, dava kullanıcı tıklama # ayrıntıları-pencere gizlemek istiyorum "ayrıntıları gizle" veya/ve navigasyon oklarının dışında herhangi bir yerde. http://docs.jquery.com/UI/Effects/toggle bkz – crs1138

cevap

21

Sen event delegation kavramına çare olabilir.

$(function() { 
    $(document).on('click', function(e) { 
     if (e.target.id === 'div1') { 
      alert('Div Clicked !!'); 
     } else { 
      $('#div1').hide(); 
     } 

    }) 
});​ 

Kontrol FIDDLE

Sana .. Bu temel fikir, diğer kısmı ile entegre ederek ne demek istediğini anlamadı ..

+0

ben çeşitli nedenlerle geçiş sopa istiyorum - – crs1138

+0

ama div "(şimdiye' $ (belge) .off gibi gizli bir kez kapalı click olayını ayarlamak gerekir ')" a tıklayın. –

+0

@DanielBarde. Neden div gizli kaldıktan sonra olay bağlamayı kaldırırsınız .. –

3

Sen (

bulanıklık olay ateştir kullanıcı tıklama diğer elemana bir div gizlemek için jQuery .blur() işlevini kullanın (link, boutton gibi whathever ..) olabilir kullanıcı DOM ağacındaki başka bir öğe)

Ben senin geçiş ile bağlantıyı anlamıyorum seçin. Eğer toggle dümeniniz DIV'yi yönetiyorsa, toggle fonksiyonunun içinde gizleme()/show() 'ı divun üzerine yerleştirdiğinizde, aynı zamanda butonun metnini güncellemeniz gerekir.

+0

geçiş bir UI etkisidir. Toggle() işlevini kullanırken # ayrıntılar penceresinin dışında herhangi bir yere tıklamayı nasıl uygulayabilirsiniz? Benim keman bakın - http://jsfiddle.net/planxdesign/b9mLB/1/ Bu yaklaşım çalışacak – crs1138