RobOter: "Ungültiges Argument" bei IE

Hallo Forum,

ich steh grad auf dem Schlauch.

Folgender Code funktioniert nicht im IE:

  
function change_position() {  
	var width = window.innerWidth;  
	var leftpos = parseInt(width/2 - 330);  
  
	if (document.getElementById) {  
//Die folgende Zeile erzeugt "Ungültiges Argument" Fehlermeldung  
		document.getElementById('logo').style.left = leftpos+'px';  
		document.getElementById('nav').style.left = leftpos+'px';  
		document.getElementById('spacer').style.left = leftpos+'px';  
		document.getElementById('content').style.left = leftpos+'px';  
		document.getElementById('footer').style.left = leftpos+'px';  
	} else {  
		document.all['logo'].style.left = leftpos+'px';  
		document.all['nav'].style.left = leftpos+'px';  
		document.all['spacer'].style.left = leftpos+'px';  
		document.all['content'].style.left = leftpos+'px';  
		document.all['footer'].style.left = leftpos+'px';  
	}  
}  

SeaMonkey/Firefox macht was ich will.

Kann mir jemand helfen?

Vielen Dank

  1. if (document.getElementById) {
    //Die folgende Zeile erzeugt "Ungültiges Argument" Fehlermeldung
    document.getElementById('logo').style.left = leftpos+'px';

    hast du dir mal anzeigen lassen, was in leftpos steht?

    SeaMonkey/Firefox macht was ich will.

    auch die Fehlerkonsole ist leer?

    Struppi.

  2. Hi,

    var width = window.innerWidth;

    Kann mir jemand helfen?

    RTFM: http://de.selfhtml.org/javascript/objekte/window.htm#inner_width

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. RTFM: http://de.selfhtml.org/javascript/objekte/window.htm#inner_width

      Hi Chris,

      Danke sehr. Hab den Fehler die ganze Zeit über an der falschen Stelle gesucht :) Merkwürdig, dass der IE diese Zeile kommentarlos schluckt.

      grüsse

      1. Hab den Fehler die ganze Zeit über an der falschen Stelle gesucht :) Merkwürdig, dass der IE diese Zeile kommentarlos schluckt.

        Nein, das ist ganz normal - das ist JavaScript. Er muss diese Zeile kommentarlos schlucken.

        Wenn du objekt.eigenschaft notierst und das Objekt hat keine so benannte Eigenschaft - dann ergibt dieser Ausdruck einfach undefined.

        Und den Wert undefined weist du dann deiner Variable zu:

        var width = window.innerWidth;

        Mit undefined arbeitest du dann weiter:

        var leftpos = parseInt(width/2 - 330);

        undefind / 2 ergibt NaN (Not a Number).
        NaN - 300 ergibt NaN.
        partseInt(NaN) ergibt NaN.
        leftpos bekommt den Wert NaN.

        Bis hier hin wurden noch keine Fehlermeldungen (Exceptions) erzeugt.

        Erst sobald du lefpos nutzt und stillschweigend davon ausgehst, es sei ein gültiger Zahlwert, dann kracht es:

        document.getElementById('logo').style.left = leftpos+'px';
        wird zu
        document.getElementById('logo').style.left = 'NaNpx';

        Und NaNpx ist eben kein gültiger Wert für die left-Eigenschaft. Hier kommt dann erst die Exception, das ist in W3C DOM 2 Style so festgelegt.

        So funktioniet JavaScript - man sollte immer prüfen, ob die verwendeten Objekte zur Verfügung stehen und ob sie sinnvolle Werte liefern.
        http://aktuell.de.selfhtml.org/artikel/javascript/objektabfragen/

        Mathias