mnike05: textContent setzen

Ich möchte nach Auswahl aus einer Combobox den Inhalt eines Eingabefeldes setzen.

document.getElementById('Feld').textContent=x;

Das Feld existiert, x hat einen Wert z.B. "NL", trotzdem bekomme ich einen Fehler:

Uncaught TypeError: Cannot set property 'textContent' of null

Was mache ich falsch?

mike

  1. Hallo mnike05,

    Was mache ich falsch?

    Du suchst an der falschen Stelle. Würde der Fehler in der genannten Zeile auftreten, müsste die Meldung lauten:

    Cannot set property 'textContent' of null

    Achte auf die Console der Browser Entwicklerwerkzeuge. Da sollte auch die Zeilennummer stehen, in der der Fehler auftritt. Bzw. in der Source-Ansicht sollte die Stelle markiert sein (Chrome malt einen roten Kreis mit einem weißen X darin).

    Oder hast Du gerade erst von innerText auf textContent umgestellt? In dem Fall ist der Browsercache vielleicht noch nicht aktualisiert. Schalte ihn auf der Netzwerkseite der Entwicklertools mal ab. Oder aktualisiere die Cache-Inhalte (zumeist mit Strg+F5).

    Wenn es tatsächlich diese Zeile ist und Du eine Fehlermeldung mit 'textContent' of null bekommst, prüfe, ob es ein Element mit ID 'Feld' wirklich gibt. Beachte auch, dass Ids case-sensitive sind - 'Feld' ≠ 'feld'.

    Rolf

    --
    sumpsi - posui - clusi
  2. Hallo,

    Ich möchte nach Auswahl aus einer Combobox den Inhalt eines Eingabefeldes setzen.

    document.getElementById('Feld').textContent=x;
    

    meinst du mit Eingabefeld ein <input type="text">? - Dann wäre die textContent-Eigenschaft hier falsch, value wäre richtig.

    Das Feld existiert, x hat einen Wert z.B. "NL", trotzdem bekomme ich einen Fehler:

    Uncaught TypeError: Cannot set property 'textContent' of null

    Genau lesen: Cannot set property [...] of null
    Anstelle einer Objekt-Referenz hat getElementById() also einen null-Wert ermittelt. Mögliche Erklärung: Es gibt entgegen deiner Aussage kein Element mit der ID "Feld". Oder die ID wurde mehrmals vergeben und die Javascript-Engine kommt mit diesem Fehler nicht klar.

    Ciao,
     Martin

    --
    Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
    1. Hallo Martin,

      <input type="text">? - Dann wäre die textContent-Eigenschaft hier falsch, value wäre richtig.

      Was input-Felder betrifft, hast Du recht, aber das erklärt nicht die Fehlermeldung. JS würde einfach eine textContent Eigenschaft ans Objekt anpappen.

      Es gibt entgegen deiner Aussage kein Element mit der ID "Feld".

      Das kann sein. Insbesondere wenn ein Tippfehler wie 'Feld' statt 'feld' gemacht wurde.

      Oder die ID wurde mehrmals vergeben und die Javascript-Engine kommt mit diesem Fehler nicht klar.

      Das kann nicht sein, JS liefert dann das erste Element mit dieser ID.

      Wesentlich ist hier vor allem, dass die FM über innerText meckert und die gezeigte Codezeile textContent anfasst. Da passt also der Code nicht zum Fehler, und solange das nicht aufgeklärt ist, können wir uns zurücklehnen. *tüte kamelle in die runde werf*

      Rolf

      --
      sumpsi - posui - clusi
      1. Hallo Rolf,

        <input type="text">? - Dann wäre die textContent-Eigenschaft hier falsch, value wäre richtig.

        Was input-Felder betrifft, hast Du recht, aber das erklärt nicht die Fehlermeldung. JS würde einfach eine textContent Eigenschaft ans Objekt anpappen.

        das stimmt; mit dem genannten Fehler hat das tatsächlich nichts zu tun.

        Oder die ID wurde mehrmals vergeben und die Javascript-Engine kommt mit diesem Fehler nicht klar.

        Das kann nicht sein, JS liefert dann das erste Element mit dieser ID.

        Aha. Das wusste ich nicht.

        Wesentlich ist hier vor allem, dass die FM über innerText meckert ...

        Wer ist "die FM"? Und wo siehst du etwas von innerText? Das taucht in mikes Posting gar nicht auf. Oder ist da Geheimtinte im Spiel?

        Ciao,
         Martin

        --
        Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
        1. Wer den Wald vor lauter Bäumen nicht sieht... Ich hatte die ID nicht gesetzt.

          Jetzt kommt zwar kein Fehler mehr an der bewussten Stelle, aber ausgegeben wird trotzdem nichts.

          Der Debugger (Chrome) wird beendet: DevTools was disconnected from the page. Bekommt man da irgendwie einen Hinweis, was das auslöst?

          Ich habe mal ein Alert nach dem Setzen eingebaut.

           document.getElementById('Land').textContent=x;
           alert(document.getElementById('Land').textContent);
          

          Da wird der korrekte Text ausgegeben.

          Ich forsche mal weiter.

          mike

          1. Hallo,

            Ich habe mal ein Alert nach dem Setzen eingebaut.

             document.getElementById('Land').textContent=x;
             alert(document.getElementById('Land').textContent);
            

            welches Element verbirgt sich hinter der ID 'Land'? Bzw. wie sieht das zugehöhrige html aus?

            Gruß
            Jürgen

          2. Hallo,

            Wer den Wald vor lauter Bäumen nicht sieht...
            Ich hatte die ID nicht gesetzt.

            manchmal ist es tatsächlich so einfach. ;-)

            Jetzt kommt zwar kein Fehler mehr an der bewussten Stelle, aber ausgegeben wird trotzdem nichts.

            Warum das so ist, habe ich dir in meinem ersten Beitrag schon erklärt: Bei einem Eingabefeld ist textContent bedeutungslos. Man kann die Eigeschaft setzen, das tut nicht weh - aber es bewirkt auch nichts.

            Der Debugger (Chrome) wird beendet: DevTools was disconnected from the page. Bekommt man da irgendwie einen Hinweis, was das auslöst?

            Das bedeutet vermutlich nur, dass das Javascript bis zum Ende durchgelaufen ist und der Debugger nun Feierabend macht.

            So long,
             Martin

            --
            Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
          3. @@mnike05

            Wer den Wald vor lauter Bäumen nicht sieht... Ich hatte die ID nicht gesetzt.

            Warum auch? Ein Eingabefeld hat doch sicher einen eindeutigen namen, über den es adressierbar und befüllbar ist.

            (Was nicht heißt, dass eine ID nicht auch sinnvoll sein kann, z.B. für die Zuordnung des labels mittels for-Attribut.)

            LLAP 🖖

            --
            Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
        2. Hallo Martin,

          FM - Fehlermeldung. Sorry, vermutlich Firmenjargon 😉

          Dass Du innerText nicht siehst, liegt an einer gewissen Form von Geheimtinte, ja.

          Rolf

          --
          sumpsi - posui - clusi
          1. Hallo,

            FM - Fehlermeldung. Sorry, vermutlich Firmenjargon 😉

            kann sein, obwohl es sich logisch anhört, wenn man's mal weiß.

            Dass Du innerText nicht siehst, liegt an einer gewissen Form von Geheimtinte, ja.

            Hey, hier spielen sie ja mit allen Tricks! :-)

            Ciao,
             Martin

            --
            Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
  3. @@mnike05

    Ich möchte nach Auswahl aus einer Combobox den Inhalt eines Eingabefeldes setzen.

    Das verstehe ich nicht. Ein Combobox ist doch schon ein Eingabefeld – mit zugehöriger datalist (Beispiel). Warum soll da was umkopiert werden?

    Was mache ich falsch?

    Du baust irgendetwas nach anstatt natives HTML zu verwenden?

    LLAP 🖖

    --
    Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
    1. Es geht darum, das Länderkürzel für eine Anschrift zu erzeugen. Das Land wird in einer Combobox mit Ländernamen in Klartext ausgewählt und soll das readonly Feld für das Länderkürzel füllen.

      Die Auswahl erfolgt über eine DropDownBox, da ist Combobox nicht ganz korrekt. Das ist bei mir noch von VB im Hinterkopf, da gibt es die Combobox mit verschiedenen Ausführungen. Eine Einstellung ist eben DropDown.

      mike

      1. @@mnike05

        Die Auswahl erfolgt über eine DropDownBox, da ist Combobox nicht ganz korrekt.

        Richtig, bei einer Combobox wird was kombiniert – nämlich Eingabefeld für freie Eingabe und vorgegebene Optionsliste.

        Es geht darum, das Länderkürzel für eine Anschrift zu erzeugen. Das Land wird in einer Combobox mit Ländernamen in Klartext ausgewählt und soll das readonly Feld für das Länderkürzel füllen.

        Auch dafür brauchst du nichts umkopieren. Bei einem Dropdown-Auswahlfeld können Wert (der beim Abschicken des Formulars übertragen wird) und Beschriftung verschieden sein:

        <select name="country">
          <option value="DE">Deuschland</option>
          <option value="AT">Österreich</option>
          <option value="CH">Schweiz</option>
        </select>
        

        Macht eine eingeschränkte Landesauswahl denn überhaupt Sinn? Jemand mit Wohnsitz in Belgien soll deinen Service nicht nutzen können?

        LLAP 🖖

        --
        Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
        1. Der Begriff Combobox ist bei mir im Hinterkopf besetzt. Es gibt aber verschiedene Ausprägungen der Combobox, eine ist nun mal die DropDown-Liste.

          Die Auswahl ist ja nicht eingeschränkt. Deutschland ist default als Eintrag eingestellt. Aber der Anwender kann aus allen wahrscheinlichen Ländern wählen.

          Ich möchte auch nicht erst das Formular abschicken. Das Kürzel des ausgewählen Landes soll sofort im Feld für das Länderkürzel auftauchen, ohne die Seite neu zu laden.

          mike

          1. @@mnike05

            Der Begriff Combobox ist bei mir im Hinterkopf besetzt. Es gibt aber verschiedene Ausprägungen der Combobox, eine ist nun mal die DropDown-Liste.

            Der Begriff Combobox hat eine bestimmte Bedeutung. Es macht wenig Sinn, ihn in einer anderen Bedeutung zu verwenden. Du bist doch nicht Hotti.

            Die Auswahl ist ja nicht eingeschränkt. Deutschland ist default als Eintrag eingestellt. Aber der Anwender kann aus allen wahrscheinlichen Ländern wählen.

            Das ist der Punkt: Was du auch für wahrscheinlich hältst, es mag Nutzer geben, die ausgeschlossen werden.

            Das Kürzel des ausgewählen Landes soll sofort im Feld für das Länderkürzel auftauchen, ohne die Seite neu zu laden.

            Nei-en. Wozu denn ein Feld für das Länderkürzel?

            LLAP 🖖

            --
            Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
  4. Hallo mnike05,

    ich hab mal eine Demo gemacht, falls Du noch festhängst.

    https://jsfiddle.net/Rolf_b/c4ugqart/

    Rolf

    --
    sumpsi - posui - clusi
    1. Ich werde es mal probieren. Bisher war ich auf ein readonly Eingabefeld fixiert.

      mike

      1. Hallo mnike05,

        was war ein readonly-Eingabefeld? Die Ausgabe für das Kürzel?

        Geht auch

        Der Code muss übrigens am Ende des Body stehen oder in einen ready-Handler eingeschlossen werden. Ich habe noch eingebaut, dass sich die Ausgabefelder automatisch beim Laden der Seite auf den Wert des <select> einstellen und Du das nicht im HTML initialisieren musst,

        Rolf

        --
        sumpsi - posui - clusi
        1. @@Rolf B

          Geht auch

          Geht auch ≠ soll man machen

          Der Code muss übrigens am Ende des Body stehen …

          Nein, der Code muss wohl nirgndwo stehen.

          Soll die Seite dazu dienen, Nutzer zum Lernen von Länderkürzeln zu bewegen? Wenn nein, dann hat ein Feld zur Anzeige des Länderkürzels auf der Seite nichts zu suchen.

          Soll dem das Formular verarbeitendem Backend nicht „Deutschland“, sondern „DE“ als Wert geschickt werden? Genau das leistet option mit value-Attribut und Elementinhalt – ohne dass Nutzer „DE“ zu Gesicht bekommen. Wozu auch?

          LLAP 🖖

          --
          Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
          1. Hallo Gunnar,

            Wozu auch?

            den Use Case zu hinterfragen ist eine andere Sache. Mike möchte das so haben und ich habe ihm gezeigt wie man es machen kann. Ob das Mikes Wunsch ist oder der Wunsch einer Fachabteilung für eine Form von WYSIWYMG, sei dahingestellt.

            Rolf

            --
            sumpsi - posui - clusi
            1. Hallo,

              den Use Case zu hinterfragen ist eine andere Sache. Mike möchte das so haben und ich habe ihm gezeigt wie man es machen kann. Ob das Mikes Wunsch ist oder der Wunsch einer Fachabteilung für eine Form von WYSIWYMG, sei dahingestellt.

              abgesehen davon ein genereller Denkanstoß zur Usability: Das Eintippen von zwei Buchstaben[1] ist oft einfacher und schneller, als eine Länderbezeichnung aus einer Liste rauszusuchen.

              Ciao,
               Martin

              --
              Ich stamme aus Ironien, einem Land am sarkastischen Ozean.

              1. Ich gehe davon aus, dass die meisten Internet-Nutzer die TLDs zumindest der Länder, mit denen sie öfters zu tun haben, spontan kennen. ↩︎

              1. Ich habe denen das Kürzelfeld ausgeredet. Es machte im ehemaligen Formular Sinn, als noch das Kürzel vor der PLZ angegeben wurde. Das ist überholt, war aber immer noch in den Köpfen.

                Werde die Beispiele aber mal bunkern, man weiß ja nie was man nochmal braucht.

                mike

                1. Hallo mnike05,

                  sehr schön :)

                  Falls übrigens „mnike05“ ein Tippfehler war und Du eigentlich „mike05“ heißen willst - das kannst Du ändern. Klick mal ganz oben auf „Einstellungen“, da kannst Du den Benutzernamen ändern. Existierende Beiträge werden nicht geändert, aber neue Beiträge tragen dann den neuen Namen.

                  Rolf

                  --
                  sumpsi - posui - clusi
                2. @@mnike05

                  als noch das Kürzel vor der PLZ angegeben wurde.

                  Da wurde das bei KFZ verwendete Kürzel benutzt. Standard war das aber nie, AFAIK.

                  Das ist die Krux bei Länderkürzeln: es gibt für ein Land nicht das eine, sondern mehrere Systeme:

                  • das im Internet verwendete: DE, AT, CH, … (ISO-3166-1 ALPHA-2)
                  • das bei KFZ verwendete: D, A, CH, …
                  • das im Sport verwendete: GER, AUT, CHF, …

                  ☞ Wikipedia: Ländercode, ISO-3166-1-Kodierliste

                  LLAP 🖖

                  --
                  Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
                  1. Hallo,

                    Das ist die Krux bei Länderkürzeln: es gibt für ein Land nicht das eine, sondern mehrere Systeme:

                    • das im Internet verwendete: DE, AT, CH, … (ISO-3166-1 ALPHA-2)
                    • das bei KFZ verwendete: D, A, CH, …
                    • das im Sport verwendete: GER, AUT, CHF, …

                    ... und dann noch das in manchen TV-Programmzeitschriften verwendete (z.B. D, Ö, CH, SAFR, KAN, SP, ISR ...)

                    ☞ Wikipedia: Ländercode, ISO-3166-1-Kodierliste

                    Die enthält die oben erwähnten Phantasiekürzel natürlich nicht.

                    Ciao,
                     Martin

                    --
                    Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
                  2. @@Gunnar Bittersmann

                    • das im Sport verwendete: GER, AUT, CHF, …

                    Da versagte wohl mein Gedächtnis. Die Schweiz ist doch SUI, oder?

                    LLAP 🖖

                    --
                    Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
              2. @@Der Martin

                Ich gehe davon aus, dass die meisten Internet-Nutzer die TLDs zumindest der Länder, mit denen sie öfters zu tun haben, spontan kennen.

                TLD ≠ Länderkürzel. Bei Großbritannien weicht beides ab: .uk vs. GB. Es mag weitere Länder geben, bei denen das der Fall ist.

                LLAP 🖖

                --
                Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
                1. Hallo,

                  Ich gehe davon aus, dass die meisten Internet-Nutzer die TLDs zumindest der Länder, mit denen sie öfters zu tun haben, spontan kennen.

                  TLD ≠ Länderkürzel. Bei Großbritannien weicht beides ab: .uk vs. GB.

                  ja, das ist mir bewusst. Ich meinte trotzdem konkret TLDs, zumal die Abkürzung UK auch im Alltag üblich ist und gefühlt sogar häufiger vorkommt. Und bevor du nochmal Einspruch erhebst: Ja, mir ist auch der Unterschied zwischen GB und UK bekannt.

                  Es mag weitere Länder geben, bei denen das der Fall ist.

                  Möglich, aber mir fällt auch gerade keins ein.

                  Ciao,
                   Martin

                  --
                  Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
            2. @@Rolf B

              den Use Case zu hinterfragen ist eine andere Sache.

              Und zwar die erste, die man im Auge haben sollte.

              Du wirst sicher auch nicht gedankenlos eine Bauanleitung für eine Bombe posten, wenn jemand danach fragt.

              LLAP 🖖

              --
              Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
              1. Hallo Gunnar,

                Du wirst sicher auch nicht gedankenlos eine Bauanleitung für eine Bombe posten, wenn jemand danach fragt.

                Hier, bitte.

                Rolf

                --
                sumpsi - posui - clusi
                1. @@Rolf B

                  Du wirst sicher auch nicht gedankenlos eine Bauanleitung für eine Bombe posten, wenn jemand danach fragt.

                  Hier, bitte.

                  Und hier, bitte.

                  LLAP 🖖

                  --
                  Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
                  1. Hallo Gunnar,

                    leider ist der beyondtellerand Link mittlerweile verschimmelt.

                    Rolf

                    --
                    sumpsi - posui - clusi
                    1. @@Rolf B

                      leider ist der beyondtellerand Link mittlerweile verschimmelt.

                      https://beyondtellerrand.com/events/duesseldorf-2018/speakers/mike-monteiro ist jetzt
                      https://beyondtellerrand.com/events/dusseldorf-2018/speakers/mike-monteiro (ue → u).

                      Ich werd bei Marc mal wegen einer Weiterleitung anklingeln. Cool links don’t change.

                      LLAP 🖖

                      --
                      Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.