私は、各カテゴリにサブカテゴリ(ダイナミックでモデルからフェッチ)があるカテゴリ(ダイナミック、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のツールのコンソールに表示される内容です:
私が何かを必要としますこのように動作します:
$(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つの事はあなたのコードで私を気にして完全に理解していることがわからない
こんにちは、私はあなたの助言を取って、私のHTML構造を簡略化しました。しかし、問題は残っています。実際に、JSはページをリロードし、すべての折りたたまれた状態に戻ります。私は 'eを追加しようとしました。(リンクをクリックすると何も起こりません)。あなたは新しいHTML構造を見てみることができますか?ありがとう、 –
あなたは正しい 'e.preventDefault()'が必要でした!投稿したJSコードから '.parent( 'div')'部分を終了しましたか?それはもはや必要ではありません。それでも問題が解決しない場合は、アイテムをクリックしたときにブラウザインスペクタに通知する内容(コンソールセクションに表示される内容)を投稿できますか? –
はい、.parent( 'div')部分を終了しました(質問のコードを更新しました)。それでも、カテゴリをクリックすると、それぞれのカテゴリだけが展開されるのではなく、すべてのカテゴリが展開されるという問題があります。私はまた、質問のブラウザインスペクタに表示されるもののスクリーンショットを更新しました。 –