| 

.NET C# Java Javascript Exception

3
Funktionsweise:
Nach Klick auf einen Button slidet ein div mittels .slideDown nach unten. In diesem Div befindet sich wieder ein Button mit dem dieses div mittels .animate nach links verschoben wird.

Das funktioniert im Firefox ganz gut. Im Safari und auf mobilen Geräten funktioniert das nach links verschieben erst nach dem zweiten Klick!?
Im IE funktioniert das GAR NICHT! Nichtmal das erste div öffnet sich (slideDown)


Script um das erste Div anzuzeigen (slideDown):
$('#btn_berechnen').click(function() {
$('#ergebnis').slideDown(500)

});


Script um das (im ersten div liegende) zweite div zu verschieben:
var $lefty = $('#ergebnis_main');
$('#btn_beratung,.pfeile_beratung').click(function() {


$lefty.animate({
left: parseInt($lefty.css('left'),10) == 0 ?
-$lefty.outerWidth() :
0
});


});



der ganze code steht innerhalb der $(document).ready(function() { Funktion
18.01.2012
strigga 31 1
1
Mach bitte ein Beispiel bei jsfiddle.net. Spontan: du brauchst ein jObject nicht mit $ voran abzuspeichern ($lefty), im oberen Beispiel fehlt ein Semikolon und bei parseInt kannst du den 2. Parameter weglassen, ist 10 default. Und versuch statt $lefty.outerWidth() lieber outherWidth() * -1 Gruß
Nicolai Schönberg 18.01.2012
Notwendig zwar nicht, aber...
das $ am Anfang einer variablen wird auch innerhalb jquery verwendet und kennzeichnet die Variable als "bereit gejqueried".
Auch außerhalb ist das nicht immer falsch. Z.B. um Aufrufe die gleichwertig mit $($($($(".test")))) wären, zu vermeiden.
Schwierig wird es nur bei der Verwendung mehrerer Frameworks...
WolfgangKluge 18.01.2012
parseInt mit 2. Parameter ist an sich keine schlechte Idee, denn 10 ist nicht default. Der Wert des Parameters wird anhand des Textes aus dem 1. Parameter festgelegt.
Steht dort 0x.. wird nicht 10 sondern 16 angenommen.
Schlimmer ist das mit führenden Nullen. Eine führende 0 (gilt nicht, wenn ein Komma enthalten ist) und es wird 8 verwendet.

Damit gilt:
parseInt("017") == 15 == parseInt("017", 8)
parseInt("017", 10) == 17

Hier ist es zwar unnötig, da hier immer Zahlen ohne führende Null zurückgegeben werden - grundsätzlich davon abzuraten ist aber auch nicht richtig - ganz im Gegenteil...
WolfgangKluge 20.01.2012
3 Antworten
0
ich geh mal davon aus, dass Dir
$lefty.css('left')
beim ersten Aufruf undefined zurückgibt.
parseInt(undefined)
ist aber NaN und NaN wiederum ist nicht 0..
D.h. in dem Fall wird animiert von undefined zu
left: 0
..

Edit: "auto" wird zurückgegeben, nicht undefined. parseInt("auto") ist allerdings ebenfalls NaN.

In Deinem Script steht
{
left: parseInt($lefty.css('left'), 10) == 0 ?
-$lefty.outerWidth() :
0
}


Wenn nun parseInt($lefty.css('left'), 10) aber NaN ist, ist dies gleichzeitig != 0. D.h. beim ersten Aufruf wird von auto (der Startwert) nach 0 animiert... Und das scheint in dem Fall wohl gleichbedeutend zu sein - daher sieht man nichts.

Beim 2. klick gibt parseInt($lefty.css('left'), 10) dann 0 zurück und es wird von 0 (dem neu gesetzten Wert nach der ersten Animation) nach -$lefty.outerWidth() animiert.. Da klappt's dann.

Du musst eigentlich nur den NaN-Fall abfangen (isNaN), dann klappt's.
18.01.2012
WolfgangKluge 1,0k 1 5
0
So, hier ist das Beispiel bei jsfiddle.net: http://jsfiddle.net/wsNXF/
Hoffe das hilft.
Hab jetzt -$lefty.outerWidth():0 gegen $lefty.outerWidth() *-1:0 ersetzt. Macht aber keinen Unterschied.


Im IE geht schon das erste div nicht auf!

wie ist das mit left:0 gemeint? dass zuerst left: 0 ausgegeben wird und danach erst gehandelt wird?


EDIT:
Hab das links rechts sliden jetzt einfach mit px angaben gemacht. einmal für das rechts sliden -=816px und einmal für das links sliden +=816px
so funktioniert es!
aber leider will im IE immer noch kein jquery funktionieren.
Und ich hab noch ein Problem: Wenn ich die Seite reloade funktioniert alles super - aber wenn ich von einer anderen Seite dorthin komme dann steht das Fenster schon offen (welches sich erst nach Klick öffnen soll)
19.01.2012
strigga 31 1
wie ich schon geschrieben hab. nur dass am Anfang nicht undefined, sondern "auto" von $lefty.css('left') zurückgegeben wird...
parseInt("auto") ist ebenfalls NaN.
WolfgangKluge 19.01.2012
anderes Problem, neue Frage: das versteht sonst keiner mehr ;)
WolfgangKluge 19.01.2012
0
alles klar! danke!
20.01.2012
strigga 31 1
das ist ein ziemlich gutes Beispiel für einen Kommentar (und keine Antwort).

Schön wäre noch, wenn Du markierst, ob eine Antwort hilfreich ist (oder eben nicht)...
Wenn eine Antwort Deine frage beantwortet, solltest Du diese als Antowrt akzeptieren (so dass man diese als gültige Antwort erkennt). Klingt komisch, iss aber so ;)

Siehe auch
http://codekicker.de/faq#Wie_funktionieren_Fragen_und_Antworten
WolfgangKluge 20.01.2012

Stelle deine Javascript-Frage jetzt!