ap0477: Prüfen der Existenz von HTML-Objekten

Hallo,

in einem HTML-File werden dynamisch (durch PHP) <INPUT>-Objekte mit eindeutigen IDs erzeugt, welche nach einem Muster generiert werden. Alle IDs werden nach dem Format "i_final" erzeugt. (Bsp.: 1_final oder 23_final) Da max. 200 solcher Objekte existieren können, möchte ich nun per Javascript die vorhandenen ID's erfassen und deren Inhalt aufsummieren. Da diese <INPUT>-Objekte zusätzlich per JavaScript (DOM) erzeugt und gelöscht werden, kann ich kein PHP einsetzen. Durch das Löschen von Objekten entstehen somit Lücken in den ID-Reihen. (id="1_final", id="2_final", id="3_final" -> nun löschen des Objektes mit der id="2_final" -> id="1_final", id="3_final").

Mein unten stehender Lösungsansatz ergibt als Ausgabe die Zahl 201, also läuft die Schleife komplett durch und es ist somit völlig egal ob die ID exisitert oder nicht. Ich möchte aber genau das kontrollieren.

Für konstruktive Vorschläge wäre ich euch echt dankbar.

ciao
Andreas

------------------------------------------------------------
JavaScript
------------------------------------------------------------
function update_Gesamt() {
  var gesamt = 0;
  for (var i=0; i <= 200; i++) {
    if (typeof(document.getElementById(i + "_final")) != "undefined") {
      gesamt = gesamt + 1;
    }
  }
  document.getElementById('gesamt').value = gesamt;
}
------------------------------------------------------------

  1. Hi,

    Alle IDs werden nach dem Format "i_final" erzeugt. (Bsp.: 1_final oder 23_final)

    das ist invalide. IDs müssen mit einem Buchstaben beginnen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Danke für die schnelle Antwort. Ich werde es heute Abend mal ausprobieren.

      ciao
      Andreas

      Hi,

      Alle IDs werden nach dem Format "i_final" erzeugt. (Bsp.: 1_final oder 23_final)

      das ist invalide. IDs müssen mit einem Buchstaben beginnen.

      Cheatah

  2. Moin,

    Mein unten stehender Lösungsansatz ergibt als Ausgabe die Zahl 201, also läuft die Schleife komplett durch und es ist somit völlig egal ob die ID exisitert oder nicht. Ich möchte aber genau das kontrollieren.

    if (typeof(document.getElementById(i + "_final")) != "undefined")

    Bei nicht existierenden IDs gibt getElementById() bekanntlich null zurück. Bist du sicher, dass dieser Wert als undefined gilt? Ich würde daher lieber auf den Wert null bzw. nicht-null abfragen. Einfach formuliert:

    if (document.getElementById(i + "_final"))

    Dazu kommt, was Cheatah schon sagte, nämlich dass IDs nicht mit einer Ziffer beginnen dürfen.

    So long,
     Martin

    --
    Paradox ist, wenn jemand eingefleischter Vegetarier ist.
    1. Hallo,

      if (typeof(document.getElementById(i + "_final")) != "undefined")

      Bei nicht existierenden IDs gibt getElementById() bekanntlich null zurück. Bist du sicher, dass dieser Wert als undefined gilt?

      Lustigerweise ist typeof(null) == "object", also ist diese Abfrage wirklich fehlerhaft.

      Mathias

  3. Nochmal vielen Dank für die schnelle und sehr gute Hilfe.
    Ich habe die id's geändert und die if-Bedingung sieht nun wie folgt aus.
    (Es funktioniert!)

    ciao
    Andreas

    ------------------------------------------------------------------------
    function doRound(x, places) {
      return Math.round(x * Math.pow(10, places)) / Math.pow(10, places);
    }

    function update_Gesamt() {
      var gesamt = 0;
      for (var i=0; i <= 200; i++) {
        if (document.getElementById("p_" + i + "_final")) {
          var final = parseFloat(document.getElementById("p_" + i + "_final").value);
          gesamt = gesamt + final;
        }
      }
      document.getElementById('gesamt').value = doRound(gesamt, 2);
    }