innerHTML und innerText geht nicht?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • innerHTML und innerText geht nicht?

    bla soll einfach nur durch test ersetzt werden.
    bei mir kommt aber immer die fehlermeldung:
    Uncaught TypeError: Cannot set property 'innerText' of null
    bzw
    Uncaught TypeError: Cannot set property 'innerHTML' of null

    Code:
    <script language='javascript'>
    document.getElementById('test').innerText = 'test';
    </script>
    
    <span id='test'>bla</span>";
    geht immer noch nicht wenn ich oben innerText mit innerHTML tausche
    Mess with the Besth, die like the rest!

  • #2
    Du willst auf das Element 'test' zugreifen, bevor es überhaupt erstellt ist.

    So gehts:
    Code:
    <html>
    <head>
    <title>foobar</title>
    <script type="text/javascript">
    window.onload = function() {
        document.getElementById('test').innerHTML = 'test';
    }
    </script>
    </head>
    <body>
    <span id="test">bla</span>
    </body>
    </html>

    Kommentar


    • #3
      achso alles klar -.-
      danke vielmals.
      Mess with the Besth, die like the rest!

      Kommentar


      • #4
        Wenn das wirklich alles ist, was du an Code hast, und er auch in dieser Reihenfolge steht - dann versuchst du auf das Element zuzugreifen, bevor es überhaupt existiert.

        Entweder SCRIPT hinter dem Element notieren; oder das Laden des Dokuments* abwarten (load-Event), bzw. das Vorhandensein des vollständigen DOM, Stichwort domready.


        * und aller eingebundener externer Ressourcen.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          jo danke für die Hilfe. Ich schreib einfach das <script> dahinter
          hab aber jetzt noch nen problem.

          meine js datei wo alle funktionen stehen (wird im head der seite extern eingebunden)
          Code:
          function changeinhalt(obj,time,wert) {
            aktuell = document.getElementById(obj).innerHTML;
            neu = Math.round((Number(aktuell)+wert)*100) / 100;
            document.getElementById(obj).innerHTML = neu;
            setTimeout(changeinhalt(obj,time,wert), time);
          }
          meine php datei (abgekürzt):
          Code:
          echo "<span id='2'>100</span>km";
          
          echo "<script language='javascript'>changeinhalt('2',1000,-1);</script>";
          geht irgendwie nicht.
          er soll sozusagen jede sekunden 1 runter zählen un das dann in dem <span> anzeigen.
          aber der wert zwischen <span></span> bleibt bei mir einfach leer.
          Mess with the Besth, die like the rest!

          Kommentar


          • #6
            setTimeout(changeinhalt(obj,time,wert), time)

            Das ist eine schöne Endlosschleife, weil du die Funktion jedesmal sofort bei der Zuweisung aufrufst.

            Kommentar


            • #7
              Abgesehen davon, dass "2" kein gültiger ID-Wert ist - sind alle Variableninhalte ab dem zweiten Aufruf "weg", weil dieser im Kontext von window ausgeführt wird.

              Closures bieten dafür eine Lösung.
              Organisation von JavaScripten


              @h3ll: Stimmt, das kommt noch hinzu, ganz übersehen.
              Zuletzt geändert von wahsaga; 29.06.2009, 17:25.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                oh ja mit der id das stimmt aber die verwende ich auch nich ^^ bei mir heißt die anders wollte nur zur übersichtlichkeit hier was kurzes nehmen aber da hast du natürlich recht da hab ich nich dran gedacht.
                der rest verwirrt mich etwas - muss ich das so kompliziert machen?
                gibt es denn nicht nen simples codeschnippselchen was mein problem löst?

                ich will einfach nur in dem code:
                Code:
                echo "<span id='test'>100</span>km";
                das alle "time" sekunden die 100 um "wert" verändert wird.
                deswegen hatte ich mir die funktion angelegt:
                Code:
                function changeinhalt(obj,wert,time) {
                  aktuell = document.getElementById(obj).innerHTML;
                  neu = Math.round((Number(aktuell)+wert)*100) / 100;
                  document.getElementById(obj).innerHTML = neu;
                  document.setTimeout(changeinhalt(obj,wert,time), time);
                }
                um die funktion nun noch zu starten habe ich einfach nach dem <span> das:
                Code:
                echo "<script language='javascript'>changeinhalt('test',-2.9,1000);</script>";
                eingefügt.

                was müsste ich denn nun verändern damit es hinhaut?
                hoffe ihr versteht was ich meine. ich denke nicht das mein problem so schwer zu lösen ist oder?
                Mess with the Besth, die like the rest!

                Kommentar


                • #9
                  also es muss doch eig nur an der zeile was faul sein oder:
                  Code:
                  document.setTimeout(changeinhalt(obj,wert,time), time);
                  weil wenn ich die wegnehme macht er ja den ganzen vorgang einmal. also geht das. wie muss ich das oben abändern das genau die funktion mit den parametern nochmal aufgerufen wird? also alle "time" sekunden
                  Mess with the Besth, die like the rest!

                  Kommentar


                  • #10
                    ok nach mehreren recherchen und nem tipp von nem kumpel bin ich jezt auf das gestoßen:
                    Code:
                    setTimeout(function(){changeinhalt(obj,wert,time);}, time);
                    ka warum man das so schreiben muss aber es geht
                    danke trotzdem!
                    Mess with the Besth, die like the rest!

                    Kommentar


                    • #11
                      Zitat von Besth Beitrag anzeigen
                      also es muss doch eig nur an der zeile was faul sein oder
                      Das sagte h3ll doch bereits!

                      wie muss ich das oben abändern das genau die funktion mit den parametern nochmal aufgerufen wird?
                      Wenn du den Noob-Weg wählen willst - dann bastelst du dir einfach den Code für den Funktionsauruf inkl. jeweils aktueller Parameter-Werte als String zusammen, und nutzt diesen String als ersten Parameter für setTimeout;
                      oder du nutzt globale Variablen.

                      Oder aber, du investierst etwas mehr Zeit und Aufwand, und liest dir den von mir verlinkten Artikel mal durch - und entwickelst daraus dann eine vernünftige, zeitgemäße Lösung.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Zitat von Besth Beitrag anzeigen
                        ka warum man das so schreiben muss aber es geht
                        Weil genau das eine Nutzung von Closures darstellt, du Vogel ...
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          ja ich habs mir durchgelesen aber nicht verstanden ... "du vogel"
                          und klar sagte h3ll
                          setTimeout(changeinhalt(obj,time,wert), time)
                          Das ist eine schöne Endlosschleife, weil du die Funktion jedesmal sofort bei der Zuweisung aufrufst.
                          aber damit konnte ich leider nicht viel anfangen weil ich ja wissen wollte WAS falsch ist.
                          aber trotzdem danke
                          Mess with the Besth, die like the rest!

                          Kommentar

                          Lädt...
                          X