Próbuję utworzyć boczny pasek nawigacyjny, w którym są wymienione kategorie, a po kliknięciu w kategorię podmiejska lista odpowiednich podkategorii jest wyświetlana tuż pod kategorią. A jeśli kategoria zostanie kliknięta ponownie, lista podrzędna jest kontrakty.co może spowodować, że html i skrypt będą się zachowywać w różnych iteracjach pętli for?
Przeprowadzam pętlę między obiektami kategorii. Wewnątrz tej zewnętrznej pętli zawieram wewnętrzną pętlę, aby wyświetlić podkategorie oraz skrypt, który ukrywa podmenu i ślizga się po nim tylko po kliknięciu kategorii. Używam znaczników szablonów django do dynamicznego przydzielania nazw klas dla moich elementów HTML oraz do odnoszenia się do nich w skrypcie. Więc po wszystkim dla iteracji pętli, istnieje lista podkategorii i dedykowany skrypt dla każdej kategorii i mają unikalne nazwy klas, więc nie ma szans na nakładanie się. Dziwne jest to, że działa to doskonale dla większości kategorii, ale niektóre kategorie i ich podmenu pozostają otwarte, a po kliknięciu na kategorię strona ładuje się ponownie.
Nie rozumiem, co mogłoby spowodować, że ten sam kod (uruchamiany w pętli for) zachowywał się tak różnie?
To jest mój kod:
{% load staticfiles %}
{% load i18n pybb_tags forumindexlistbycat %}
{% catindexlist as catindexlisted %}
{% block body %}<div class="col-sm-12 col-md-12 col-xs-12 col-lg-12 body-container leftsidenavigator" style="margin-top:15px;">
<div class="col-sm-12 col-md-12 col-xs-12 col-lg-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{{category.name}}{{category.name}}" style="font-weight:600;padding-right:20px;"><a href="">{{category.name}}</a></li>
<ul style="padding:0px;" class="nav-collapse88">
{% for forum in category|forumindexlistbycat %}
<li class="catlistforum{{category.name}}{{category.name}} forum-name" style="padding-right:10px;"><a href="{{ forum.get_absolute_url }}">{{forum.name}}</a></li>
{% endfor %}</ul><script>
$(function() {
$(".catlistforum{{category.name}}{{category.name}}").hide();
$(".category-name{{category.name}}{{category.name}} a").click(function(e) {
e.preventDefault();
$(".catlistforum{{category.name}}{{category.name}}").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();
}});
})
</script>
{% endfor %}
</ul>
</div>
</div>
{% endblock %}
{% block theme_script %}<script src="{% static "pinax/js/theme.js" %}"></script>{% endblock %}
Czy masz szansę podać minimalną próbkę kodu? – TomLingham
Podaj swój kod HTML. –
Jakaś wzorzec w nazwie niedziałających kategorii? może spacje, a nie angielskie znaki? Pamiętaj, że musisz się upewnić, że jest to poprawny ciąg do użycia tutaj, np. '$ (". catlistforum {{category.name}} {{category.name}} ")." Myślę, że powinieneś użyć PK zamiast nazwy. – trinchet