2012-02-02 8 views
3

私は別の要素をクリックして表示される(トグル)divを作成しています。JQuery Toggleは最初のクリックで動作しますが、(期待どおり)

アンカー(#toggle-contents)をクリックすると表示され、同じアンカーをクリックした場合やドキュメント内の他の場所をクリックすると非表示になります。

私はこのハウツーのコードに従っています:Creative overlay/popup with jQuery

現在、初めてクリックされていますが、その後すぐに表示され、非表示になります。

マークアップ:

<div id="block-header"> 
    <a id="trigger-contents">Toggle</a> 
    </div> 
    <div id="block-contents"> 
    </div> 

のjavascript:

function registerToggleDiv(trigger, toggle) 
{ 
    $('#' + trigger).click(function() 
    { 
     $('#' + toggle).toggle(function() 
     { 
     console.log('toggle'); 
     $(document).click(function(event) 
     { 
      if (!($(event.target).is('#' + toggle) || 
       $(event.target).parents('#' + toggle).length || 
       $(event.target).is('#' + trigger))) 
      { 
      console.log('toggle hide'); 
      $('#' + toggle).hide(500); 
      } 
     }); 
     }); 
    }); 
} 
registerToggleDiv('trigger-contents', 'block-contents'); 

私はここで他のトグルの質問に比較するエラーを見つけることを試みたが、いずれかのヒントを見つけることができませんでした。

ありがとうございました!

+1

あなたのhtmlコードを投稿することができますか? – Unknown

+0

あなたは何をしようとしているのですか?$( '#' + toggle).toggle();この行$( '#' + toggle).hide(500);それを隠している可能性があります。 – Daniel

+0

どのように/初期の 'トグル'変数? – Omid

答えて

1

triggerをクリックすると、伝播が行われ、文書onclickが発生します。

あなたはonclickイベントを文書化するために結合されています

$('#' + toggle).hide(500); 

あなたは以下のように文書のクリックを防ぐために、クリックした要素に伝播を停止する必要があります。

$('#' + trigger).click(function(e){ 
    e.stopPropagation(); 
}); 
+0

ありがとう、これは私の問題を解決! –