AndyFFM: Javascript-Problem mit .toLowerCase() bei einem Array

Hallo allerseits.

Ich probier schon seit Stunden rum und google mich durch Foren, aber steige nicht durch, wo der Fehler liegt. Vielleicht suche ich auch nur nach dem falschen Stichwort?
Ich habe folgende Funktion:

  
function CheckLoginDopplung(NamenArray)  
{  
         for(i=NamenArray.length; 0 <= i; i--) {  
		if (NamenArray[i].toLowerCase() == document.regfrm.name.value.toLowerCase()){  
			var xyz = document.getElementById("LoginDopplung");  
			xyz.innerHTML = "Name schon belegt :(";  
			return false;  
		}  
	}  
	  
	var xyz = document.getElementById("LoginDopplung");  
	xyz.innerHTML = "Name noch frei :D";  
	return true;  
}  

Es geht darum, beim Registrieren zu überprüfen, ob der eingegebene Name bereits vergeben ist. Die Funktion läuft fehlerfrei ohne ".toLowerCase()", bloß wird dann eine Eingabe 'Erwin" nicht als belegt erkannt, wenn bereits ein 'erwin' registriert ist.
Deshalb wollte ich einfach die Eingabe aus "document.regfrm.name.value" sowie das Array aller bereits registrierter Namen "NamenArray" auf Kleinbuchstaben reduzieren und dann vergleichen.

Die Seite der Eingabe lässt sich auch fehlerfrei auf Kleinbuchstaben umwandeln, nur beim umwandeln des Arrays an der Stelle [i] bricht die Funktion immer ab und zeigt keine der beiden Ausgaben am Ende an.

Wenn ich den Wert von NamenArray[i] ausgeben lasse, werden normale Strings ausgegeben. Daher sehe ich das Problem nicht, dass ich die nicht einfach durch .toLowerCase() bearbeiten kann.

Danke für Ratschläge und Grüße :)
Andy

  1. Lieber AndyFFM,

    beim umwandeln des Arrays an der Stelle [i] bricht die Funktion immer ab und zeigt keine der beiden Ausgaben am Ende an.

    was zeigt denn Deine Fehlerkonsole als Grund für den Abbruch an?

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. for(i=NamenArray.length; 0 <= i; i--) {

    du rufst hier ein Element des Arrays zuviel auf

  3. @gast42
    Thx, dass ein Element zuviel aufgerufen wird, behebe ich. Löst aber nicht das eigentliche Problem.

    @Felix
    Kannte die Fehlerkonsole noch gar nicht. Sie gibt folgendes aus

    Fehler: NamenArray[i] is undefined

    &

    Fehler: uncaught exception: [Exception... "Cannot modify properties of a WrappedNative"  nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)"  location: "JS frame :: chrome://global/content/bindings/autocomplete.xml :: onxblpopuphiding :: line 834"  data: no]

    Beide Fehlermeldungen treten erst auf, sobald ich .toLowerCase() an NamenArray[i] anfüge. Ohne .toLowerCase() arbeitet er mit NameArray ohne Fehlermeldung und gibt korrekte Ergebnisse im Browser aus.

    1. Hallo,

      Thx, dass ein Element zuviel aufgerufen wird, behebe ich. Löst aber nicht das eigentliche Problem.

      doch, genau das *ist* das eigentliche Problem: Dadurch, dass du die Schleife rückwärts laufen lässt, greifst du im ersten Durchlauf auf einen Array-Index zu, der nicht mehr existiert und daher "undefined" ist:

      Fehler: NamenArray[i] is undefined

      Wenn du diesen undefined-Wert mit einem anderen Ausdruck vergleichst, wird dieser Vergleich false ergeben und der Rumpf des if-Statements wird nicht ausgeführt - trotz logischem Fehler scheint der Code richtig zu laufen.
      Du versuchst aber im ersten Schleifendurchlauf, eine Methode toLowerCase() des undefined-Wertes aufzurufen, und das kann nicht funktionieren.

      So long,
       Martin

      --
      Ein Patriot ist jemand, der bereit ist, sein Land gegen seine Regierung zu verteidigen.
      1. Top, ihr habt recht. Ich habe es geändert zu
           for(i=NamenArray.length-1; 0 <= i; i--)
        und jetzt läuft es wie gewünscht mit .toLowerCase().

        Vielen Dank :)