dedlfix: Abfrage auf Feld-ID klappt nicht

Beitrag lesen

Tach!

Wenn der Wert null ist, dann ist er nicht undefined. Deine Prüfung prüft also das falsche.

Verstehe ich nicht.

Die Fehlermeldung sagt dir "... is null". Das ist nicht einfach nur ein dahergeredeter Text, den man ignorieren kann. Zudem sollte man Debugging betreiben. Wenn ein Vergleich nicht klappt, dann wäre es sinnvoll, sich den Inhalt der Beteiligten anzuschauen, um sich zu vergewissern, ob das was man da zu tun gedenkt, auch so ist.

typeof document.getElementById( "XMLHttpRequest_gesendet" ) !== "undefined"

"undefined" ist ein Stringliteral, da wird beim Prüfen nichts anderes rauskommen, kann man sich also schenken. Aber der andere Teil, typeof dingenskirchen, den kann man mal näher anschauen: console.log(typeof ...).

Das "undefined" bezieht sich nicht auf das Vorhandensein irgendwelcher Elemente im DOM, sondern ist einer der Javascript-Typen. Wenn document.getElementById() nichts findet, dann ist das Ergebnis null, wie in "nichts vorhanden", also durchaus ein definiertes Ergebnis.

Ich möchte das Vorhandensein dieser ID prüfen unabhängig vom Inhalt. Wenn ich das Objekt einrichte, passiert der Fehler nicht, obwohl der Inhalt leer (NULL?) ist:

Logisch. Das Ergebnis von document.getElementById() ist in keinem Fall undefined, deine Prüfung ist also immer wahr. Aber wenn kein Element vorhanden ist, ist das Ergebnis null, und null hat kein innerHTML, weswegen es zur Fehlermeldung kommt.

Außerdem muss man nicht den Umweg über den Typnamen gehen, man kann den Wert direkt prüfen, also

if (document.getElementById( "XMLHttpRequest_gesendet" ) !== undefined)

was immer noch stets wahr wäre, aber

if (document.getElementById( "XMLHttpRequest_gesendet" ) !== null)

das wäre der ausführliche funktionierende Vergleich. Da aber null ein falsy Wert ist, beim Finden das Ergebnis aber truthy ist, kann man den Vergleich mit dem null einsparen und gleich direkt testen, ob document.getElementById(...) wahr ist oder nicht.

if (document.getElementById( "XMLHttpRequest_gesendet" ))

Weiter kann man optimieren, dass das DOM nicht zweimal durchsucht werden muss, indem man Das Ergebnis in einer Variable ablegt und mit der weiterarbeitet.

const sent = document.getElementById('XMLHttpRequest_gesendet');
if (sent) {
  alert ('id vorhanden: XMLHttpRequest_gesendet');
  sent.innerHTML = url;
}

(Für alte Browser var statt const nehmen.)

dedlfix.