Enrico: Probleme mit "push"-Befehl

Hallo und guten Abend,

seit gestern beschäftigt mich ein nicht nachvollziehebarer Fehler (?) bei der Verwendung des "push"-Befehls.

Ich gebe zuvor eingegelesene Daten aus, exemplarisch an der Rubrik "Adresse" verdeutlicht:


Screenshot1

Klicke ich nun auf [Ändern], dann bekomme ich ein "PopUp", in dem ich alle Felder ändern kann:


Screenshot2

Verlasse ich nun ein geändertes Eingabefeld, dann wird geprüft, ob die ID bereits im Array "A" enthalten ist und wenn nicht - zu Testzwecken - eine entsprechende Meldung, der neue Inhalt, die dem Eingabefeld zugewiesene ID und der Inhalt des Array "A" ausgegeben:


Screenshot3


Screenshot4


Screenshot5


Screenshot6

Wie ihr seht, werden alle Werte angezeigt, d.h. die Abfrage der einzelnen Werte funktioniert, auch am "push"-Befehl kann ich keinen Fehler entdecken, aber dennoch wird die ID dem Array "A" nicht hinzugefügt.

Hier der betroffene Code mit ergänzten Hinweisen auf die jeweiligen Screenshots:

var A = [];

function Pruefen (W, U, V)
{
   var W = document.getElementById(W),
       I  = W.value,
       N = W.parentNode.id.replace(/[^\d]/g, ""),
       IL = document.getElementById("IL" + N),
       IM = document.getElementById("IM" + N),
       IR = document.getElementById("IR" + N),
       OL = document.getElementById("BL3"),
       OM = document.getElementById("BM3"),
       OR = document.getElementById("BR3"),
       R = new RegExp (V, "i");

if (R.test (I))
   {
      if (I != U)
      {
         alert ("Nicht gefunden"); <--- Screenshot3

if (inArray (A, W.id) === false)
         {
            alert(I); <------ Screenshot4
            alert(W.id); <--- Screenshot5

A.push (W.id);
         }

OL.className = "BL3_0";
         OM.className = "BM3_0";
         OR.className = "BR3_0";
      }
      else
      {

}

alert(A[0]); <--- Screenshot6

}
   else
   {
      IL.className = "IL2";
      IM.className = "IM2";
      IR.className = "IR2";
   }
}

Warum funktioniert das Hinzufügen nicht?

Vielen Dank für eure Hilfe und Gruß,
Enrico

  1. Hallo,

    Mit welchem Browser testest du da? Mir ist keiner bekannt, der Arrays beim alert so ausgibt:

    array(1): {
      [0]: undefined
    }

    Das sieht mir wie PHPs var_dump oder so aus, aber nicht wie das Ergebnis von […].toString().  Ist das vielleicht ein alter Opera?

    Generell würde ich nicht mit alert, sondern mit console.log() und dem Debugger arbeiten. Auf der Konsole lassen sich komplexe Datentypen viel einfacher untersuchen.

    Mal angenommen, der Array hat tatsächlich einen Wert und zwar undefined vom Typ Undefined, so sollte alert() darauf toString() aufrufen.

    alert([undefined]);

    Das ergibt nach Adam Riese und Eva Zwerg (= der ECMAScript-Spezifikation) einen leeren String. Der alert sollte also leer sein.

    Meine Vermutung: Der wahrscheinlich vereinfachte Code, den du gepostet hast, zeigt nicht das ganze Problem. Lass dir mal console.log(A); vorher und nachher ausgeben und prüfe ggf. den Typ sämtlicher Elemente. Setze Debugger-Breakpoints an der Stelle, wo du die Zuweisung machst, und schau dir im Debugger die Variablen an.

    Grüße
    Mathias

    1. Hallo Mathias,

      danke für Deine Antwort.

      array(1): {
        [0]: undefined
      }

      Diese Ausgabe habe ich über einen in JavaScript nachgebauten "do-dump"-Befehl.
      Verwenden tue ich den aktuellsten Firefox unter Windows.

      Der wahrscheinlich vereinfachte Code, den du gepostet hast, zeigt nicht das ganze Problem

      Der Code war vollständig, ich habe nichts weg gelassen.

      Die Konsole sagt beim Typen von "W.id" String und bei "A" Array, das passt also.

      Verstehen tue ich es nach wie vor nicht, denn unmittelbar vor dem Hinzufügen zum Array habe ich noch eine Ausgabe und dann soll der zu übergebene Wert plötzlich undefined sein...

      Gruß,
      Enrico

  2. Hallo,

    ich habe das Problem jetzt anders gelöst.

    Ich verwende jetzt einen String anstelle eines Array und habe die Abfragen umgestellt.

    Jetzt klappt es.

    Gruß,
    Enrico