LigH: MSIE 7: lokale vs. globale Variablen

Hallo zusammen.

Bisher war ich ja der Meinung: Wenn man eine Variable in JavaScript eh bloß in einer einzigen Funktion braucht, ist es relativ egal, ob man sie lokal und explizit deklariert (mit "var") oder global und implizit (ohne).

Opera und Mozilla FireFox haben damit auch keine Probleme.

Nur der Microsoft Internet Explorer 7 ist da etwas eigen.

Gehen wir mal davon aus, dass ich mitten im Text ein DIV habe, das mit einer ID "aoldiv" versehen ist und durch einen Style "display:none" unsichtbar ist. Aufgrund verschiedener Entscheidungen, die mit einem PHP-Skript zur Laufzeit berechnet werden, befindet sich die folgende Skriptdeklaration auch nicht im HEAD, sondern im BODY, aber das sollte in HTML 4.01 Transitional auch erlaubt sein. Es soll nun beim Verlassen eines Textfeldes geprüft werden, ob darin der Text "aol.de" oder "aol.com" enthalten ist (onblur="CheckMail(this)"); in dem Fall wird eine Warnung angezeigt, das DIV eingeblendet.

<script language="JavaScript" type="text/javascript">  
<!--
function CheckMail(textfield)  
{  
 aoldiv = document.getElementById("aoldiv"); // <== Laufzeitfehler in Microsoft JScript: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.  
 if(aoldiv)  
 {  
  aolpos = Math.max(textfield.value.search(/aol\.de/), textfield.value.search(/aol\.com/));  
  if(aolpos > -1)  
  {  
   aoldiv.style.display = "block";  
  }  
 }  
}  
//
-->  
</script>

Was soll diese Fehlermeldung an dieser Stelle? Offenbar ist "Microsoft JScript" nicht das selbe wie "ECMAScript / JavaScript"... bei letzterem wären globale, implizite Deklarationen von Variablen mittels Wertzuweisung erlaubt. Nur der MSIE 7 beharrt hier auf dem "var" davor!

Jetzt wird's aber inkonsequent: Die folgende Variante funktioniert, obwohl "aolpos" dann wiederum global implizit deklariert wurde.

<script language="JavaScript" type="text/javascript">  
<!--
function CheckMail(textfield)  
{  
 var aoldiv = document.getElementById("aoldiv"); // muss für den MSIE 7 mit "var" lokal deklariert werden  
 if(aoldiv)  
 {  
  aolpos = Math.max(textfield.value.search(/aol\.de/), textfield.value.search(/aol\.com/));  
  if(aolpos > -1) // ^ darf global deklariert sein?!  
  {  
   aoldiv.style.display = "block";  
  }  
 }  
}  
//
-->  
</script>

Liegt es nun daran, dass das Zuweisungsergebnis einerseits ein Objekt, andererseits eine Zahl ist?

  1. Hi,

    Gehen wir mal davon aus, dass ich mitten im Text ein DIV habe, das mit einer ID "aoldiv" versehen ist

    Das ist für den IE dann ein Unterobjekt von window.

    aoldiv = document.getElementById("aoldiv"); // <== Laufzeitfehler in Microsoft JScript: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.

    Globale Variablen sind in JavaScript und JScript Unterobjekte von window.

    Klingelt's?

    Offenbar ist "Microsoft JScript" nicht das selbe wie "ECMAScript / JavaScript"...

    Und ich dachte, JScript hieße nur aus Scherz anders ... ;->

    Gruß, Cybaer

    --
    Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
    (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)