JavaScript jQuery removeClass Problem

NoXPhasma

Lieutenant
Registriert
Jan. 2010
Beiträge
843
Guten Morgen,

ich hoffe mir kann jemand helfen, ich lasse mit jQuery eine Animation durchlaufen und am ende die entsprechende Class entfernen und durch eine andere ersetzen, damit die Funktion kein 2. mal ausgeführt werden kann. Leider juckt das jQuery nicht, die Class wird entfernt und ersetzt, aber die Funktion wird bei erneutem click wieder abgefeuert.

Mein Code:
Code:
$().ready(function(){
	$(".activecontent").click(function () {
		$(this).find(".number").animate({height: "50px",backgroundColor: '#eee'}, 500, function() {});
		$(this).find("textarea").animate({height: "40px",backgroundColor: '#eee'}, 500, function() {});
		$(this).removeClass("activecontent").addClass("content");
	});
	$(".content").click(function () {
		$(this).find(".number").animate({height: "120px",backgroundColor: '#aaa'}, 500, function() {});
		$(this).find("textarea").animate({height: "110px",backgroundColor: '#aaa'}, 500, function() {});
		$(this).removeClass("content").addClass("activecontent");
	});
});

*edit*
Das sind natürlich 2 Funktionen ;)
Die erste Funktion ist .content, das ist auch die einzige die immer wieder abgefeuert wird, .activecontent wird nicht mal berücksichtigt.
 
Zuletzt bearbeitet:
und warum nimmst du nicht gleich eine toogle funktion her im grunde machst du hier nix anderes
 
(ich vemute mal) das ganze liegt an der architektur...

die click funktion wird für alle elemente mit der klasse einmal registiert (und nicht für die klasse selbst). wenn du die klasse entfernst, ist immernoch die registrierte click funktion da. einfache alternative: 3 klassen, eine für click, die anderen 2 wie bisher als erkennung, welcher zustand. die erste bleibt dauerhaft, wie der click, die anderen beiden können wechseln.

allerdings, wenn du wirklich toggle willst, dann nimm doch das von jquery.
 
In meinem Fall möchte ich eine Tabelle mit jQuery so verändern, das einzelne TR Elemente vergrößert/verkleinert werden können. Mit Toggle habe ich nicht genau das hin bekommen was ich wollte und habe es nun umgeschrieben.

Code:
$(document).ready(function(){

	$(".number").click(function () {
		var height = $(this).css("height");
		var currentId = $(this).attr('id');
		if (height == '48px') {
			$("#"+currentId).animate({height: "120px",backgroundColor: "#aaaaaa"}, 500, function() {});
			$("#t"+currentId).animate({height: "110px",backgroundColor: "#aaaaaa"}, 500, function() {});
			$(this).css("background-color","yellow");
		}
		else {
			$("#"+currentId).animate({height: "50px",backgroundColor: "#eeeeee"}, 500, function() {});
			$("#t"+currentId).animate({height: "40px",backgroundColor: "#eeeeee"}, 500, function() {});
			$(this).css("background-color","");
		}
	});
});

So funktioniert es wunderbar, auch wenn es nicht die eleganteste Lösung ist.
 
Um die Lösung deines Originalposts umzusetzen, musst du nicht click() sondern live() benutzen.

Ich würde es aber eher so wie in deinem letzten Post machen. Allerdings würde ich nicht die Höhe prüfen, sondern ein Attribut setzen, das angibt, ob der Content active ist oder nicht. Also so in der Art:
Code:
$(document).ready(function(){

    $(".number").click(function () {
        var currentId = $(this).attr('id');
        if ($(this).attr("active") == undefined) {
            $("#"+currentId).animate({height: "120px",backgroundColor: "#aaaaaa"}, 500, function() {});
            $("#t"+currentId).animate({height: "110px",backgroundColor: "#aaaaaa"}, 500, function() {});
            $(this).css("background-color","yellow");
            $(this).attr("active", true);
        }
        else {
            $("#"+currentId).animate({height: "50px",backgroundColor: "#eeeeee"}, 500, function() {});
            $("#t"+currentId).animate({height: "40px",backgroundColor: "#eeeeee"}, 500, function() {});
            $(this).css("background-color","");
            $(this).removeAttr("active");
        }
    });
});
 
Zurück
Oben