2012-10-04 15 views
31

Powiel możliwe:
How to detect a click outside an element?jQuery: Ukryj element na kliknięcie gdziekolwiek indziej oprócz elementu

staram się osiągnąć, że 'div' ukrywa jeśli użytkownik kliknie wszędzie z wyjątkiem na elemencie. Mam następujący kod wykonujący toggle(), jeśli użytkownik kliknie przycisk. Chcę, aby kliknięcie przycisku pozostało plus, jeśli element "Szczegóły" jest widoczny, reaguje na inne części ekranu.

$('.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

I prawdopodobnie nie tłumaczyć sobie dobrze. Spójrz na to skrzypce http://jsfiddle.net/planxdesign/b9mLB/1/ To jest kod, ponieważ mam go w tej chwili, chciałbym ukryć okno # details na wypadek, gdyby użytkownik kliknął w "szczegółach ukrywania" i/lub gdziekolwiek poza strzałkami nawigacyjnymi. – crs1138

Odpowiedz

21

Możesz odwołać się do koncepcji event delegation.

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

    }) 
});​ 

Sprawdź FIDDLE

I nie rozumiem co masz na myśli poprzez integrację z drugiej strony .. Jest to podstawowa idea ..

+0

Chciałbym trzymać się przełącznika z różnych powodów. Czy istnieje sposób zaimplementowania kliknięcia w dowolnym miejscu oprócz okna # details podczas korzystania z toggle()? Zobacz moje skrzypce - http://jsfiddle.net/planxdesign/b9mLB/1/ – crs1138

+0

To podejście będzie działać, ale musisz ustawić zdarzenie click na off, gdy div jest ukryty, tak jak to '$ (document) .off (" kliknij ")". –

+0

@ DanielBarde. Po co usuwać wiązanie zdarzenia po ukryciu elementu div? –

3

Można użyć funkcji jQuery .blur() ukryć div, gdy użytkownik kliknij na inny element (jak łącza, boutton, whathever ..)

Impreza plama jest ogień, gdy element jest tracąc ostrość (użytkownik wybiera inny element w drzewie DOM)

Nie rozumiem linku z przełącznikiem. Jeśli twój przycisk przełączania zarządza DIV, to wewnątrz funkcji przełączania należy umieścić hide()/show() na div, w tym samym czasie co aktualizacja tekstu przycisku.

+0

toggle to efekt interfejsu użytkownika - patrz http://docs.jquery.com/UI/Effects/toggle – crs1138

Powiązane problemy