Mobile

JavaScript jQuery und slideUp (seit update anderes verhalten?)

mercsen

Lt. Commander
Registriert
Apr. 2010
Beiträge
1.681
Moin liebe CB gemeinde,

ich habe hier ein kleines, in meinen Augen triviales, problem mit der SlideUp methode von jQuery.

Zuerst ein wenig background:

ich habe mir nen eigenes framework geschrieben welches mit templates und einem JS parser arbeitet.

zumdem gibt es einen ajax loader, also eine klasse die seiten asynchron nachlädt, parst und anzeigt.

der loader nimmt als argument entweder ein objekt mit parametern oder aber einen functionsaufruf.

wenn man den loader mit einer funktion aufruft wird davon ausgegangen das diese funktion ein neues template erzeugt und selbstständig parst. Anschließend wird das so erzeugte template an die show methode des loaders übergeben.

soweit klappt das alles ganz gut, ich rufe den loader mit der funktion System.module.kalender.generateTagesuebersicht auf.

Die Tagesübersicht wird erstellt usw.

bevor die so erzeugte seite aber an die show methode übergeben werden soll, möchte ich mit jQuery noch ein wenig das designe verändern, eigentlich will ich nur das ein bestimmter Teil vor dem anzeigen mit slideUp eine´gefahren wird.

früher (k.a. welche jQery version) konnte ich, bevor ich ein element ins dom eingehängt habe, einfach folgendes machen:

Code:
neuesTemplate.slideUp(0);
$('body').append(neuesTemplate);

und es kam eingezogen ins DOM.

merkwürdigerweise geht das nun nicht mehr!

css eigenschaften etc. kann ich vor dem einfügen verändern, nur das verdammte SlideUp verrichtet nicht mehr seine Arbeit.

Es vorher per css "einzufahren" bringt auch nicht den gewünschten erfolg da dann die SlideDown metode verrückt spielt :-/

jemand ne idee?
Wichtig ist halt das ein bestimmter teil eingefahren wird, bevor das ganze ins DOM kommt.
 
Zuletzt bearbeitet:
fehler doch net behoben :(

naja es ist einfach ein jQuery Objekt.

ich versuche das mal ein wenig anschaulicher zu erklären.

die funktion generateTagesuebersicht lädt erstmal alle daten vom server die benötigt werden um die tagesübersicht zu erzeugen, die templates wurden bereits beim betreten der seite geladen.

Um zu verhindern, das zu viele requests gleichzeitig an den server gehen sind die anfragen auf 3 stück limitiert.

Nun werden die anfragen schritt für schrtt ausgeführt und bei erfolg in einem stack zwischen gespeichert.

die anfragen einhalten daten zu den projekten etc. erzeugen also am ende objekte wie

Code:
$('<div id="blablabla"><div class="sub div"></div></div>');

ist der stack voll hat der also eine beliebige anzahl von solchen jQuery Objekten.
anschließend wird dann ein neues div erzeugt und die Objekte aus dem stack angehängt (ja ginge auch früher, hat aber seine grund das ich 2 mal iteriere)

das sieht in etwa so aus

Code:
            // Jetzt wird daraus die Tagesuebersicht gebastelt
            var tagesuebersicht = $('<div></div>');
            //
            for(var i = 0; i < System.systemmodule.kalender.tagesuebersicht.vars.stack_expectedSize; i++) {
                // projekt aus dem Stack laden
                stack_project = System.systemmodule.kalender.tagesuebersicht.vars.stack[i]
                // Ins DOM einhängen
                tagesuebersicht.append(stack_project);
                // Nun noch einmal die Zeilen makierungen neu machen
                rows = stack_project.children('.projekt_view_togglebar_big').children('.projekt_view_row:not(.projekt_view_row_head, ._hidden)').each(function(index, object) {
                    // Die reihen makierung entfernen
                    object = $(object);
                    // Sicherheitshalber die style informationen
                    // der reihe entfernen
                    object.removeClass('row_first').removeClass('row_second');
                    // Und die neue einfügen
                    if(index % 2 == 0)
                        object.addClass('row_first');
                    else
                        object.addClass('row_second');
                });
            }
            // Alle anzeige rows für den schicht contentverstecken
            tagesuebersicht.find('.projekt_view_row_schicht_content').slideUp(1);

tagesuebersicht ist also ein div dem weitere divs eingehängt wurden.

denoch mukkt die slideUp methode rum. der erzeugte code stimmt mittlerweile komplett und lässt sich auch validieren.
 
Ich glaube so effect- Dinger kannst du nicht auf Sachen anwenden, die nicht im DOM sind.
slideDown funktioniert aber für gewöhnlich mit Objekten mit style="display:none;"

Würde es daher so angehen.
 
wie gesagt es ging vorher. hab nen altes projekt rausgekramt und null probleme mit der implementierung (jQuery 1.7.1).

wie auch immer, display: none ist ok. Dann funktioniert auch die slideDown methode.
 
Zurück
Oben