Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
[FRAGE]8 CSS /JS DropDown Menüs, nur das 1. funktioniert
Hallo, ich bin CSS Anfänger und habe mir durch mühsame Web-Inspiration ein Dropdown-Menü zusammengebaut.
Das Menü habe ich auf der Webseite 8x platziert, aber nur das erste funktioniert so wie es sollte.(Beim Aufklappen eines 2ten Eintrags, sollte das offene Menü wieder schliessen.
Die ID der Menüs habe angepasst und fortlaufend Nummeriert. (#cssmenu 1-8) HTML und CSS ist Fehlerfrei aber mit JS bin ich total überfordert.
Mit der Datei script2.js ist nur das erste Dropdown Menü aktiviert, und man kann gut sehen wie ich das möchte. Welche Änderungen muss ich jetzt noch auf dem Script vornehmen, damit alle
Menüs aktiv werden?
Für jegliche Hilfe, herzlichen Dank.
Die Webseite kann man unter folgenden Link einsehen.
ADRESSE: Web-Start
JS Script
Code:
( function( $ ) {
$( document ).ready(function() {
$('#cssmenu ul ul li:odd').addClass('odd');
$('#cssmenu ul ul li:even').addClass('even');
$('#cssmenu > ul > li > a').click(function() {
$('#cssmenu li').removeClass('active');
$(this).closest('li').addClass('active');
var checkElement = $(this).next();
if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
$(this).closest('li').removeClass('active');
checkElement.slideUp('normal');
}
if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
$('#cssmenu ul ul:visible').slideUp('normal');
checkElement.slideDown('normal');
}
if($(this).closest('li').find('ul').children().length == 0) {
return true;
} else {
return false;
}
});
});
} )( jQuery );
Vorschlag:
ändere mal testhalber im oben gezeigten Script alle Selektoren "#cssmenu" in "#cssmenu2", und verrate uns, ob dann nur der zweite Block funktioniert.
Das Script weist allen Elementen mit id "cssmenu" diverse css-Klassen zu, sowie einen "onclick" - eventhandler (eine Funktion) zu. In der Funktion werden dann erneut die css-Klassenzuweisung geändert.
Da aber nicht alle deine Menü-Container-Divs dieselbe id "cssmenu" haben (sondern "cssmenu2", "cssmenu3", etc., ich vermute das hast du manuell angepasst) greift der Code nur für den einen Container, bei dem der Selektor in der Funktion und die entsprechende id im HTML-Code übereinstimmen.
Alternativ kannst du den Code im Script so anpassen, dass alle Menü-Container einbezogen werden. Ich habe im folgenden Beispiel deinen Code soweit ergänzt, dass Menü 1 und Menü 2 funktionieren dürften. Probier's mal, ich habe es nicht getestet.
HTML:
<script>
( function( $ ) {
$( document ).ready(function() {
*/--------------------- cssmenu -----------------------*/
$('#cssmenu ul ul li:odd').addClass('odd');
$('#cssmenu ul ul li:even').addClass('even');
$('#cssmenu > ul > li > a').click(function() {
$('#cssmenu li').removeClass('active');
$(this).closest('li').addClass('active');
var checkElement = $(this).next();
if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
$(this).closest('li').removeClass('active');
checkElement.slideUp('normal');
}
if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
$('#cssmenu ul ul:visible').slideUp('normal');
checkElement.slideDown('normal');
}
if($(this).closest('li').find('ul').children().length == 0) {
return true;
}
else {
return false;
}
});
*/--------------------- cssmenu2 -----------------------*/
$('#cssmenu2 ul ul li:odd').addClass('odd');
$('#cssmenu2 ul ul li:even').addClass('even');
$('#cssmenu2 > ul > li > a').click(function() {
$('#cssmenu2 li').removeClass('active');
$(this).closest('li').addClass('active');
var checkElement = $(this).next();
if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
$(this).closest('li').removeClass('active');
checkElement.slideUp('normal');
}
if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
$('#cssmenu2 ul ul:visible').slideUp('normal');
checkElement.slideDown('normal');
}
if($(this).closest('li').find('ul').children().length == 0) {
return true;
}
else {
return false;
}
});
});
} )( jQuery );
</script>
Dreamweaver meldet Syntaxfehler.
Nach einer kleinen Anpassung, klappt es, supper Danke sehr. Kann ich jetzt das 8x ergänzen.
Wahrscheinlich nicht ganz der richtige Weg, aber es funktioniert, Top, Danke, das freut mich sehr.
Code:
( function( $ ) {
$( document ).ready(function() {
/*--------------------- cssmenu -----------------------*/
$('#cssmenu ul ul li:odd').addClass('odd');
$('#cssmenu ul ul li:even').addClass('even');
$('#cssmenu > ul > li > a').click(function() {
$('#cssmenu li').removeClass('active');
$(this).closest('li').addClass('active');
var checkElement = $(this).next();
if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
$(this).closest('li').removeClass('active');
checkElement.slideUp('normal');
}
if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
$('#cssmenu ul ul:visible').slideUp('normal');
checkElement.slideDown('normal');
}
if($(this).closest('li').find('ul').children().length == 0) {
return true;
}
else {
return false;
}
});
/*--------------------- cssmenu2 -----------------------*/
$('#cssmenu2 ul ul li:odd').addClass('odd');
$('#cssmenu2 ul ul li:even').addClass('even');
$('#cssmenu2 > ul > li > a').click(function() {
$('#cssmenu2 li').removeClass('active');
$(this).closest('li').addClass('active');
var checkElement = $(this).next();
if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
$(this).closest('li').removeClass('active');
checkElement.slideUp('normal');
}
if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
$('#cssmenu2 ul ul:visible').slideUp('normal');
checkElement.slideDown('normal');
}
if($(this).closest('li').find('ul').children().length == 0) {
return true;
}
else {
return false;
}
});
});
} )( jQuery );
1. Sowas ist KEIN CSS-Menü! Das ist ein JS-Menü.
2. Code einfach zu duplizieren ist nie eine gute Idee. Du kannst doch deinen Menüs einfach eine gemeinsame CSS-Klasse geben (über das HTML-Attribut "class") und dann darüber alle Menüs ansprechen:
Code:
(function($) {
$(document).ready(function() {
$('.DEINE_CSS_KLASSE ul ul li:odd').addClass('odd');
$('.DEINE_CSS_KLASSE ul ul li:even').addClass('even');
$('.DEINE_CSS_KLASSE > ul > li > a').click(function(){
var menu = $(this).parent('.DEINE_CSS_KLASSE')
menu.find("li").removeClass('active');
$(this).closest('li').addClass('active');
var checkElement = $(this).next();
if ((checkElement.is('ul')) && (checkElement.is(':visible'))) {
$(this).closest('li').removeClass('active');
checkElement.slideUp('normal');
}
if ((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
menu.find('ul ul:visible').slideUp('normal');
checkElement.slideDown('normal');
}
if ($(this).closest('li').find('ul').children().length == 0) {
return true;
} else {
return false;
}
});
});
})(jQuery);
Diese Seite verwendet Cookies, um Inhalte zu personalisieren und dich nach der Registrierung angemeldet zu halten. Durch die Nutzung unserer Webseite erklärst du dich damit einverstanden.