• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] JQuery 1.7.1 Klassen ändern funktioniert nicht?

Hoffy1988

New member
hi ihr,

ich bin neu hier im forum, und auch neu in JavaScript, und auch neu in JQuery.

(ich habe sufu genutzt aber bin auf kein entsprechendes Ergebnis gekommen, oder ich bin zu dumm zum suchen ^^)

so mein problem:
ich soll für den Kunden eine Art Farbfächer machen, die beim anklicken aufklappt.
ich hab dies auch soweit schon realisiert.
Jedoch
ich hatte vorher ein script geschrieben, dass mir beim anklicken vom kompletten DIV die klasse ändert.
jetzt will mein Kunde aber dass ich nur jeweils die "Überschrift" innerhalb des divs anklicke um weiterzublättern.

aber ich krieg das einfach nicht gebacken, und ich weiß nicht warum.
geht das nicht? oder ist im code etwas falsch??

(die "Fächer" sind noch im Aufbau und noch nicht wirklich gestaltet, die Farben dienen erstmal nur zur Identifizierung für mich selber ^^)

mir geht es lediglich nur darum:
Geht das oder geht das nicht?? bzw was habe ich falsch gemacht

Vielen Dank bereits im voraus

(der Code is angehängt)

Gruß Hoffy

Code:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="height=1024, width=768, maximum-scale=1.0, user-scalable=no, target-densitydpi=device-dpi" />
<title>Farbfächer</title>

<script type="text/javascript" src="jquery-1.7.1min.js"></script>

<script type="text/javascript">

function (){
	$("#popup01.header").click(function(){
		if( $("#popup01").hasClass("G000") ) {
			$("#popup01").removeClass("G000");
			$("#popup01").addClass("G015");
		}
		else {
			return;
		}
	});
};

</script>



<style>
@charset "UTF-8";

*		{	margin:0; padding:0	}

#wrapper	{	background:rgba(102,102,102,1);	width:768px;	height:1024px;	}
#test	{	background:rgba(102,102,102,1);	width:768px;	height:1024px;	}
#leiste	{	background:rgba(073,073,077,1);	width:768px;	height:57px;	bottom:0;	left:0;	position:absolute;	z-index:9999;	}

.popups	{	position:absolute;	display:block;	width:200px;	height:640px;	bottom:57px;	left:00px;	-webkit-transform-origin: 80% 95%;	text-decoration:none;	}
.header	{	color:rgba(0,0,0,1);	text-align:left;	margin-top:35px;	margin-left:35px;	margin-right:35px;	margin-bottom:15px;	font-size:20px;	height:75px;	}
.bild	{	width:100%;	min-height:200px;	border:none;	}

#popup01	{	background:rgba(255,255,000,1);	z-index:1300;	}
#popup02	{	background:rgba(255,000,255,1);	z-index:1200;	}
#popup03	{	background:rgba(000,255,255,1);	z-index:1100;	}
#popup04	{	background:rgba(255,000,000,1);	z-index:1000;	}
#popup05	{	background:rgba(000,255,000,1);	z-index:0900;	}
#popup06	{	background:rgba(000,000,255,1);	z-index:0800;	}
#popup07	{	background:rgba(255,255,255,1);	z-index:0700;	}

.G000	{	-webkit-transform:rotate(00deg);    -webkit-transition-duration: 1s;	}
.G015	{	-webkit-transform:rotate(15deg);    -webkit-transition-duration: 1s;	}
.G030	{	-webkit-transform:rotate(30deg);    -webkit-transition-duration: 1s;	}
.G045	{	-webkit-transform:rotate(45deg);    -webkit-transition-duration: 1s;	}
.G060	{	-webkit-transform:rotate(60deg);    -webkit-transition-duration: 1s;	}
.G075	{	-webkit-transform:rotate(75deg);    -webkit-transition-duration: 1s;	}
.G090	{	-webkit-transform:rotate(90deg);    -webkit-transition-duration: 1s;	}

</style>

</head>

<body>
	<div id="wrapper">

		<div id="popup01" class="G000 popups"><p class="header">Broschüren und Magazine</p>	<a href="popup://PopUp01/open"><img class="bild" src="Gruppen/01.png" alt=""/></a></div>
		<div id="popup02" class="G000 popups"><p class="header">Hardcover, Flyer und Ordner</p>	<a href="popup://PopUp02/open"><img class="bild" src="Gruppen/02.png" alt=""/></a></div>
		<div id="popup03" class="G000 popups"><p class="header">Mailings</p>					<a href="popup://PopUp03/open"><img class="bild" src="Gruppen/03.png" alt=""/></a></div>
		<div id="popup04" class="G000 popups"><p class="header">Poster und Wandplakate</p>		<a href="popup://PopUp04/open"><img class="bild" src="Gruppen/04.png" alt=""/></a></div>
		<div id="popup05" class="G000 popups"><p class="header">Karten</p>					<a href="popup://PopUp05/open"><img class="bild" src="Gruppen/05.png" alt=""/></a></div>
		<div id="popup06" class="G000 popups"><p class="header">Boxen</p>					<a href="popup://PopUp06/open"><img class="bild" src="Gruppen/06.png" alt=""/></a></div>
		<div id="popup07" class="G000 popups"><p class="header">Aufsteller</p>				<a href="popup://PopUp07/open"><img class="bild" src="Gruppen/07.png" alt=""/></a></div>

		<div id="leiste"></div>	
	</div>
</body>
</html>
 
Nur eine Idee: Die Überschriften in <span> mit eigener ID legen und das onclick Event nur auf diese ID's legen und nicht auf die <div> ID's.
 
Code:
function (){
	$("#popup01.header").click(function(){
		if( $("#popup01").hasClass("G000") ) {
			$("#popup01").removeClass("G000");
			$("#popup01").addClass("G015");
		}
		else {
			return;
		}
	});
};
Hier hast du zwei Hunde vergraben: zum einen hast du einen Syntaxfehler, da deine definierte Funktion keinen Namen hat (und aufrufen tust du sie auch nicht...) - das hättest du in der Fehlerkonsole sehen könn.
Zum Anderen ist dein Selektor falsch - da fehlt ein Leerzeichen: "#popup01 .header".

Außerdem könntest du das Skript genereller gestalten (wenn die Klassennamen, die du entfernst und hinzufügst bei allen "popup"s gleich sind), indem du von dem .header (erreichbar über $(this)) über .parent() zu dem jeweiligen div.popup navigierst.

PS: das else ist komplett sinnfrei...
PPS: Selektoren sind langsam. Deswegen sollte man den Rückgabewert da in einer lokalen Variable speichern.

Code:
(function(){
	$(".popups .header").click(function(){
		var popup = $(this).parent();
		if (popup.hasClass("G000")){
			popup.removeClass("G000");
			popup.addClass("G015");
		}
	});
}());
- ungetestet.

EDIT: der Code oben funktioniert natürlich nur, wenn er in einem <script> ausgeführt wird, der im HTML hinter den ganzen .popups liegt, da sonst die .popups noch nicht existieren. Ein andere Möglichkeit wäre:
Code:
$(document).ready(function(){...}
 
Zuletzt bearbeitet:
zum einen sry für die späte Antwort.

zum anderen danke für das Aufklären kkapsner.

Code:
function (){
	$("#popup01.header").click(function(){
		if( $("#popup01").hasClass("G000") ) {
			$("#popup01").removeClass("G000");
			$("#popup01").addClass("G015");
		}
		else {
			return;
		}
	});
};

das war ja das script in der Testphase.
dass das else return zu dem Zeitpunkt Sinnfrei war, ist mir bewusst.
ich wollte erstmal überhaupt durchsteigen warum das script überhaupt nicht funktionierte.
das else return habe ich am ende dann durch:

Code:
		else {
			$("#popup01").removeClass("G015");
			$("#popup01").addClass("G000");
		}

ersetzt.
Und für jeden weiteren popup dann mit der entsprechend angepassten Winkel-Klasse erstellt

der 2. punkt:
die Funktion sollte eigentlich als anonyme Funktion beim anklicken eines Bereichs aufgerufen werden.
ich habe mir etliche tutorials angesehen und dachte das wäre so richtig...
Danke für die Aufklärung.

der 3. Punkt:
dass selektoren langsam sind weiß ich.
aber auf meiner "Seite" (eigentlich nur ein kleines script innerhalb einer App) soll folgendes sein:

ich habe eine Art Fächer mit mehreren überlappenden Einzelseiten.
wenn ich bei dem obersten "Slide" auf die Überschrift tappe, dreht der sich um 90° nach rechts
dann kommt der 2. Fächer zum Vorschein.
drücke ich bei dem auf die Überschrift, dreht der sich nur um 75° nach rechts.
usw bis ich dann beim letzten slide bin und einen aufgedrehten Fächer habe.

falls Du willst kann ich dir den aktuellen stand mal irgendwo hochladen, damit du mal drüber schauen kannst??
 
hab ich gerade getestet.

funktioniert weder im anchor selber,
noch am ende der popups,
noch ganz am ende der html-datei
auch mit dem $(document).ready Aufruf keine Reaktion.

trotzdem danke für die Mühe
 
Um die ganze Sache zu vereinfachen, empfiehlt es sich eigentlich immer den (Quell-)code strukturiert zu posten. Das erleichter den Helfenden das Lesen ungemein. Auch sollte man ein noch so kleines Beilspiel evtl . mal vorher testen und mit Hilfe der Fehlerkonsole die gröbsten Fehler beheben. So fehlt in deinem Beispiel bei [src="jquery-1.7.1min.js"] schomal ein Punkt zwischen der "1" und dem ".min" und wo wir schon mal dabei sind: Warum eigentlich eine so 'alte' jQuery-Version? Mittlerweile ist schon die Versin 1.11.0 stable verfügbar.

Das mit dem document.ready muss funktionieren, wenn auch nur ein Fehler in der Fehlerkonsole ausgegeben wird. Hast du diesen denn korrekt definiert? Hier hatte kkapsner ausnahmsweise mal eine Klammer und einen Strichpunkt vergessen:
Code:
$(document).ready(function(){...});

Da die ganzen DIV's ja sowieso schon eine Klasse "popups" haben, würde ich diese nehmen und eine Funktion mit Parameterauswertung benutzen. Die Parameter für den Klassenwechsel dann als data-Attribut im HTML mit angeben (durch Leerzeichen getrennt).
HTML:
<body>
	<div id="wrapper">

		<div id="popup01" class="G000 popups" data-classes="G000 G090">
			<p class="header">Broschüren und Magazine</p>
			<a href="popup://PopUp01/open">
				<img class="bild" src="Gruppen/01.png" alt="" />
			</a>
		</div>
		<div id="popup02" class="G000 popups" data-classes="G000 G075">
			<p class="header">Hardcover, Flyer und Ordner</p>
			<a href="popup://PopUp02/open">
				<img class="bild" src="Gruppen/02.png" alt="" />
			</a>
		</div>
		<div id="popup03" class="G000 popups" data-classes="G000 G060">
			<p class="header">Mailings</p>
			<a href="popup://PopUp03/open">
				<img class="bild" src="Gruppen/03.png" alt="" />
			</a>
		</div>
		<div id="popup04" class="G000 popups" data-classes="G000 G045">
			<p class="header">Poster und Wandplakate</p>
			<a href="popup://PopUp04/open">
				<img class="bild" src="Gruppen/04.png" alt="" />
			</a>
		</div>
		<div id="popup05" class="G000 popups" data-classes="G000 G030">
			<p class="header">Karten</p>
			<a href="popup://PopUp05/open">
				<img class="bild" src="Gruppen/05.png" alt="" />
			</a>
		</div>
		<div id="popup06" class="G000 popups" data-classes="G000 G015">
			<p class="header">Boxen</p>
			<a href="popup://PopUp06/open">
				<img class="bild" src="Gruppen/06.png" alt="" />
			</a>
		</div>
		<div id="popup07" class="G000 popups" data-classes="G000 G000">
			<p class="header">Aufsteller</p>
			<a href="popup://PopUp07/open">
				<img class="bild" src="Gruppen/07.png" alt="" />
			</a>
		</div>

		<div id="leiste"></div>
	</div>
</body>

Dieses kann mittels jquery.data(attribute) ausgelesen und verwendet werden. Soweit ich verstanden habe sollen ja immer nur 2 Klassen vertauscht werden, wenn auf den 'header' geklickt wurde, also die Klasse "G000" mit der Klasse "G0xx" und bei erneutem Klick wieder zurück. Dies kannst du auch ohne die If-Abfrage erledigen. Hierzu einfach jquery.toggleClass(class name(s)) verwenden. Komplett würde das dann für alle 'heade' in einem so ausschauen:
Code:
$(document).ready(function () {
	$(".popups .header").click(function (event) {
		var popup = $(this).parent();
		popup.toggleClass(popup.data('classes'));
	});
});

Dadurch werden alle 'header' registriert und entsprechend nur der angeklickte 'header' behandelt und daraufhin das übergeordnete DIV-Element wechselt die Klasse.
 
Wow.
Super.
Danke für die Antwort.

zum Thema warum jquery 1.7.1:
wie schon gesagt ich bin neu Einsteiger in dem Thema.
Und hatte mir auch schon ein paar Tutorials angeschaut und die bezogen sich alle auf 1.7.1.

zum Thema mit dem 1.7.1.min.js, dass da ein "." fehlt.
die jquery Datei die ich mir gezogen habe, hieß einfach so.
An der Datei habe ich weder Name noch Inhalt geändert und da ich die Datei zur Sicherheit eh immer mitliefere,
sollte der Dateiname eig irrelevant sein solange die richtig eingebunden ist ;)

zum Thema mit der Document.ready Funktion:
Es ist gut möglich, dass ich nicht an die eine Klammer gedacht habe, bin noch neu in der Materie :(

Die version von Dir ist im vergleich zu dem was ich im Moment habe wirklich kurz :O
werd ich bei Gelegenheit testen wie schon gesagt ist im Moment stressig hier
 
Warum eigentlich eine so 'alte' jQuery-Version? Mittlerweile ist schon die Versin 1.11.0 stable verfügbar.
Du warst zu lange weg :) Es gab schon einen Quantensprung zu 2.1.1. Allerdings nur, wenn man den alten Schrott wie IE 8 & Konsorten nicht mehr braucht.
Browser Support | jQuery

- - - Aktualisiert - - -

zum Thema mit dem 1.7.1.min.js, dass da ein "." fehlt.
die jquery Datei die ich mir gezogen habe, hieß einfach so.
Wo hast du die geladen?
 
Du warst zu lange weg :) Es gab schon einen Quantensprung zu 2.1.1. Allerdings nur, wenn man den alten Schrott wie IE 8 & Konsorten nicht mehr braucht.
Browser Support | jQuery

- - - Aktualisiert - - -


Wo hast du die geladen?

Heheh der war gut... :)
Ich habe bewust die 2er Version angesprochen, obwohl ich weiß, dass diese verfügbar ist. Ich habe nur die Version 1.11.0 angesprochen, da dort ausser einer Weiterentwicklung schließlich auch Fehlerbereinigungen eingeflossen sind.

- - - Aktualisiert - - -

Wo steht das hesst?

Ist offiziell im jQuery blog nachzulesen:
In keeping with our pledge to minimize API divergence between the 1.x and 2.x branches, we’ll be releasing a jQuery 1.10 within a couple of months that incorporates the bug fixes and differences reported from both the 1.9 and 2.0 beta cycles. In the future, we will be maintaining feature parity between 1.10 and 2.0, 1.11 and 2.1, etc.

Und dieser Ausschnitt belegt auch, warum es schließlich nur eine API Dokumentation gibt:
jQuery 2.0 is API-compatible with 1.9, which means that all of the changes documented in the jQuery 1.9 Upgrade Guide have been applied to jQuery 2.0 as well.
 
Zurück
Oben