Prüfen der Existenz von HTML-Objekten
ap0477
- javascript
0 Cheatah0 ap0477
0 Der Martin1 molily
0 ap0477
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;
}
------------------------------------------------------------
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
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
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
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
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);
}