2012-10-04 8 views
31

可能性の重複:
How to detect a click outside an element?jQueryのは:どこにも離れ要素のクリックで要素を非表示に

私は、ユーザーが以外の場所をクリックした場合「DIV」は隠していることを達成しようとしています要素上にユーザーがボタンをクリックすると、次のコードでtoggle()を実行します。私は、ボタンのクリックがプラスになり、 'Details'要素が見えるならば、画面の他の部分に反応します。

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

私はおそらくうまく自分自身を説明しませんでした。このフィドルを見てくださいhttp://jsfiddle.net/planxdesign/b9mLB/1/ これは私が現時点で入手したコードです。ユーザーのクリックで#details-windowを隠したいのですが「詳細を隠す」、または/およびナビゲーション矢印の他の場所で – crs1138

答えて

21

event delegationのコンセプトに頼ることができます。私はあなたが他の部分との統合により、何を意味するのか理解できなかった

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

    }) 
});​ 

チェックFIDDLE

。これは基本的な考え方..です

+0

さまざまな理由でトグルに固執したいと思います。 toggle()を使用しているときに、#details-windowのどこかでクリックを実装する方法はありますか?私のフィドルを見てください - http://jsfiddle.net/planxdesign/b9mLB/1/ – crs1138

+0

このアプローチはうまくいくでしょうが、divが隠れてしまったらクリックイベントをオフにする必要があります。 '$(document).off("クリックしてください ")。 @DanielBarde。 –

+0

divが一旦隠されたら、なぜイベントバインディングを削除するのですか? –

3

あなたは(リンク、boutton、whatheverのような...)他の要素にdivのときに、ユーザーのクリックを非表示にするjQuery .blur()機能を使用することができます

要素がフォーカスを失うされたときにblurイベントは(火ですユーザーがDOMツリー上の別の要素を選択)

私はあなたのトグルとのリンクを理解していません。トグルボタンがDIVを管理している場合は、ボタンのテキストを更新するのと同時にdivにhide()/ show()を配置するトグル機能の内部にあります。

+0

トグルはUIエフェクトです。http://docs.jquery.com/UI/Effects/toggleを参照してください。 – crs1138

関連する問題