2016-09-13 5 views
0

私は、各カテゴリにサブカテゴリ(ダイナミックでモデルからフェッチ)があるカテゴリ(ダイナミック、djangoモデルからフェッチ)で作成された垂直方向のナビゲーションバーを作成しようとしています。 JSコード内のクラスを参照すると、コードが機能します。つまり、カテゴリをクリックすると、それぞれのサブカテゴリからなるサブメニューが開きます。しかし、問題は、いずれかのカテゴリをクリックすると、そのすべてが展開されてすべてのサブカテゴリが表示されることです。私はただクリックして開いて開いたままにしておきたいだけです。JSコードでPython Django変数を使用するにはどうすればよいですか?

マイHTML:

{% block body %}<div class="col-md-12 col-xs-12 body-container leftsidenavigator" style="margin-top:15px;"> 
    <div class="col-md-12 col-xs-12 leftsidenavigator-inner" style="padding:0px;"> 
     <h2><center>Categories</center></h2> 
      <ul class="catindexlist catlistcat nav-collapse89"> 
       {% for category in catindexlisted %} 
        <li class="catindexlistitem category-name" style="font-weight:600;padding-right:20px;"><a href="" id="category-name{{category.name}}">{{category.name}}</a></li> 
        <ul style="padding:0px;" class="nav-collapse88"> 
         {% for forum in category|forumindexlistbycat %} 
          <li class="catlistforum forum-name" id="{{category.name}}{{forum.name}}" style="padding-right:10px;"><a href="{{ forum.get_absolute_url }}">{{forum.name}}</a></li> 
         {% endfor %}</ul> 
       {% endfor %} 
      </ul></div></div>{% endblock %} 

私の理想的でないが、Javascriptを作業:

$(function() { 
    $(".catlistforum").hide(); 
    $(".category-name a").click(function(e) { 
    e.preventDefault(); 
    $(".catlistforum").slideToggle(); 
    if(!($(this).parent('li').parent('div').siblings('div').children('ul').children('div').is(":visible"))){ 
      $(this).parent('li').parent('div').siblings('div').children('ul').children('div').is(":visible").slideToggle(); 
    }}); 
}) 

これは、クロームのdevのツールのコンソールに表示される内容です: enter image description here

私が何かを必要としますこのように動作します:

$(function() { 
    $(".catlistforum").hide(); 
    $(".category-name a").click(function(e) { 
    e.preventDefault(); 
    $(".catlistforum").slideToggle(); 
    if(!($(this).parent('li').siblings('div').children('ul').children('div').is(":visible"))){ 
      $(this).parent('li').siblings('div').children('ul').children('div').is(":visible").slideToggle(); 
    }}); 
}) 

このコードは、カテゴリをクリックするとページをリロードし、サブメニューは表示されません。 forループを使用したことに注意してください。最終的なHTMLには、いくつかのサブカテゴリを持ついくつかのカテゴリがあります。

Djangoによって動的に生成されたIDを参照するにはどうすればよいですか? % extends %% includes %のチェーンを通じて、このスクリプトは、フッターがレンダリングされた後、ページの下部に他のスクリプトが付属しているため、ページにスクリプトを配置する配置問題ですか?私はここで何が欠けていますか?私は3つの事はあなたのコードで私を気にして完全に理解していることがわからない

答えて

0

:両方のあなたのリストに

  1. を、あなたは「UL」の間の「DIV」と「李」を使用しています。私はそれが正しいかどうかわからない/問題を引き起こす可能性があります。 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul
  2. 最初のJqueryコードでは、関数child()を使用していますが、これはchildren()ですか?
  3. 最初のJqueryコードでは、私は 'if'ステートメントを理解していません。私はあまりにも速くそれを読んでいるかもしれませんが、それは言う: "無関係なサブメニューが表示されない場合、slideToggleすべての無関係で目に見えるサブメニュー"。それが私の過ちかどうかわからない。

あなたのHTML構造に基づいて(私の問題nº1に関係なく)、私はあなたがしたいことを理解しています(クリックしたカテゴリのサブメニューを表示し、他のものを非表示にします)。仕事(再び:あなたのHTML構造に基づく):

$(function() { 
     $(".catlistforum").hide(); 
     $(".category-name a").click(function(e) { 
      e.preventDefault(); 
      $(".nav-collapse88").hide(); 
      $(this).parent('li').parent('div').next('.nav-collapse88').show(); 
     }); 
    }) 

Personnally私は上記mentionned「divを」終了するHTML構造を変更します。表示されたアイテムには 'catindexlistitem'クラス、サブメニューには 'nav-collapse88'クラスで隠されたクラスがあります。ここでもJavascriptで、上記と同じ手順を使用できます:すべての '.nav-collapse'を非表示にし、クリックされた項目の横にあるもののみを表示します。

希望、幸運を願う

+0

こんにちは、私はあなたの助言を取って、私のHTML構造を簡略化しました。しかし、問題は残っています。実際に、JSはページをリロードし、すべての折りたたまれた状態に戻ります。私は 'eを追加しようとしました。(リンクをクリックすると何も起こりません)。あなたは新しいHTML構造を見てみることができますか?ありがとう、 –

+0

あなたは正しい 'e.preventDefault()'が必要でした!投稿したJSコードから '.parent( 'div')'部分を終了しましたか?それはもはや必要ではありません。それでも問題が解決しない場合は、アイテムをクリックしたときにブラウザインスペクタに通知する内容(コンソールセクションに表示される内容)を投稿できますか? –

+0

はい、.parent( 'div')部分を終了しました(質問のコードを更新しました)。それでも、カテゴリをクリックすると、それぞれのカテゴリだけが展開されるのではなく、すべてのカテゴリが展開されるという問題があります。私はまた、質問のブラウザインスペクタに表示されるもののスクリーンショットを更新しました。 –

関連する問題