e7: Kleiner Syntaxfehler - aber wo?

Hi,

ich habe eigentlich nur ein kleines Problem - irgendwo in folgendem Code muss ein Syntaxfehler stecken:

alert("stelle #1");
 for (c = 0; c < 6; c++) {
  setval('m', 2);
 }
 alert("stelle #2");

Die Funktion setval() ist folgendermaßen definiert (weiter oben):

function setval(id, value) {
 document.getElementById(id).innerHTML = value;
}

Allerdings wird nur bei Stelle #1 was ausgegeben; Stelle #2 wird nicht ausgeführt! Wer kann mir helfen? Vielen Dank schon mal im Voraus.

E7

  1. Hallo,

    kann es sein, dass das Element, das du mit document.getElementById(id).innerHTML ansprechen willst noch gar nicht existiert, wenn die Schleife durchläuft?

    Versuch mal das Script hinter besagtes Element zu setzen, oder es einfach erst nachdem die Seite geladen wurde zu starten.

    Gruß
    Norbert

    1. Hi,

      kann es sein, dass das Element, das du mit document.getElementById(id).innerHTML ansprechen willst noch gar nicht existiert, wenn die Schleife durchläuft?

      Versuch mal das Script hinter besagtes Element zu setzen, oder es einfach erst nachdem die Seite geladen wurde zu starten.

      Das Element wird erst nach dem entsprechenden Codeausschnitt definiert. Allerdings kann dies nicht das Problem sein, da
       a) es bei anderen Elementen klappt (die Aufrufe sind identisch in der Zeile vorher) und
       b) das Script erst nach einer Eingabe in ein Textfeld aufgerufen wird (der Code steckt in einer Funktion, die mit onChange= aufgerufen wird)

      E7

      1. Hi E7

        kann es wirklihc so simpel sein? :

        alert("stelle #1");
        for (c = 0; c < 6; c++) {

        setval('m', '2');

        }
        alert("stelle #2");

        Gruß aus Berlin!
        eddi

        1. Hi,

          es ist FAST so simpel:

          setval('m', '2');

          setval('m_' + c, rst[c]);

          Allerdings hab ich die Zeile ein bisschen vereinfacht, sonst sucht noch irgendjemand den Fehler im + oder [] oder so. Denn: Die einfache Variante geht auch nicht.

          E7

          1. Re:

            sei mal bitte so lieb und (poste den kompletten Code) || (gib bitte einen Link an)

            Gruß aus Berlin!
            eddi

            1. Hi,

              sei mal bitte so lieb und (poste den kompletten Code) || (gib bitte einen Link an)

              hier der komplette, relevante Code.

              E7

              ---------------------------------- CODE -------------------

              <div class="content"><h1>Bewegungen</h1>
              <script type="text/javascript" language="javascript">
              <!--
              function getval(id) {
               return document.getElementById(id).value;
              }

              function setval(id, value) {
               document.getElementById(id).innerHTML = value;
              }

              function recalc() {
               var nahrung_multiplikator = 1;
               var nahrung = 0;
               var max_speed = 0;
               var anzahl = 0;
               var rst = new Array(0, 0, 0, 0, 0, 0);
               for (i = 0; i < 3; i++) {
                a = parseFloat(getval('b_menge_' + i));
                if (a > 0) {
                 w = getval('b_werte_' + i);
                 w = w.split("|");
                 anzahl += a;
                 if (parseFloat(w[1]) > max_speed) max_speed = parseFloat(w[1]);
                 nahrung += a*parseFloat(w[0]);
                 for (c = 0; c < 6; c++) {
                  rst[c] += a*parseFloat(w[6+c]);
                 }
                }
               }
               setval('ehgesamt', anzahl);
               setval('nahrungsverbrauch', nahrung*nahrung_multiplikator);
               setval('geschwindigkeit', max_speed);
               alert("stelle #1");
               for (c = 0; c < 6; c++) {
                setval('m_' + c, rst[c]);
               }
               alert("stelle #2");
              }
              //-->
              </script>
              <span id="m">ff</span>
              <form method="post">
              <table with="100%" class="tabellenrahmen" style="text-align: center; ">
              <tr class="tabellenkopf"><td>Bewegen</td><td>Typ</td><td>Max</td><td>Futter</td><td>Speed</td><td>&nbsp;</td><td>Nahrung</td><td>Holz</td><td>Stein</td><td>Metall</td><td>Schwefel</td><td>GG</td></tr>

              <tr><td><input type="text" size="6" onchange="recalc();" id="b_menge_0"/><input type="hidden" id="b_ehname_0" value="faustkämpfer"/><input type="hidden" id="b_werte_0" value="1|1|5|10|0|0|3|3|3|3|3|0"/></td><td>Faustkämpfer</td><td>998</td><td>1</td><td>1</td><td>&nbsp;</td><td>3</td><td>3</td><td>3</td><td>3</td><td>3</td><td>0</td><td></td></tr>
              <tr><td><input type="text" size="6" onchange="recalc();" id="b_menge_1"/><input type="hidden" id="b_ehname_1" value="schlagkräftiger_sammler"/><input type="hidden" id="b_werte_1" value="2|4|5|4|0|0|3|3|3|3|3|1"/></td><td>Schlagkräftiger sammler</td><td>101</td><td>2</td><td>4</td><td>&nbsp;</td><td>3</td><td>3</td><td>3</td><td>3</td><td>3</td><td>1</td><td></td></tr>

              <tr><td><input type="text" size="6" onchange="recalc();" id="b_menge_2"/><input type="hidden" id="b_ehname_2" value="kampfbulle"/><input type="hidden" id="b_werte_2" value="2|1.5|40|50|0|0|3|3|3|3|3|0"/></td><td>Kampfbulle</td><td>10</td><td>2</td><td>1.5</td><td>&nbsp;</td><td>3</td><td>3</td><td>3</td><td>3</td><td>3</td><td>0</td><td></td></tr>
              <tr><td><span id="ehgesamt">0</span></td><td>&nbsp;</td><td>&nbsp;</td><td><span id="nahrungsverbrauch">0</span></td><td><span id="geschwindigkeit">0</span></td><td>&nbsp;</td><td><span id="m_1">0</span></td><td><span id="m_2">0</span></td><td><span id="m_3">0</span></td><td><span id="m_4">0</span></td><td><span id="m_5">0</span></td><td><span id="m_6">0</span></td></tr>

              </table>

              1. Ach Du Armer:

                for (c = 0; c < 6; c++) {
                  setval('m_' + c, rst[c]);
                }

                Die ID "m_0" gibt es nicht ;)

                eddi

                1. Hi,

                  Die ID "m_0" gibt es nicht ;)

                  äh, ja, jetzt wo du's sagst... Vielen Dank!

                  E7

              2. hier der komplette, relevante Code.

                Noch ein Tipp:

                function getval(id) {
                return document.getElementById(id).value;
                }

                function setval(id, value) {
                document.getElementById(id).innerHTML = value;
                }

                Du solltest dir immer angewöhnen zu prüfen ob das was du verwenden willst auch existiert. Dann wäre zumindest kein fehler eingetreten.

                In etwa so:
                function getval(id) {
                if(!document.getElementById) return ;
                var obj = document.getElementById(id);
                if(!obj) return alert('Das Element ' + id + 'existiert nicht');

                return obj.value;
                }

                function setval(id, value) {
                if(!document.getElementById) return ;
                var obj = document.getElementById(id);
                obj.innerHTML = value;
                }

                Struppi.

                1. Hi,

                  Du solltest dir immer angewöhnen zu prüfen ob das was du verwenden willst auch existiert. Dann wäre zumindest kein fehler eingetreten.

                  Der Code wird von einem PHP-Script erstellt; da >MÜSSEN< alle Elemente da sein - wenn nicht, ist sowieso irgendwo ein rießiger Fehler... Aber ich werd's mir merken...

                  E7

                  1. Du solltest dir immer angewöhnen zu prüfen ob das was du verwenden willst auch existiert. Dann wäre zumindest kein fehler eingetreten.

                    Der Code wird von einem PHP-Script erstellt; da >MÜSSEN< alle Elemente da sein - wenn nicht, ist sowieso irgendwo ein rießiger Fehler... Aber ich werd's mir merken...

                    Naja, evtl. willst du die Funktionen ja nochmal woanders verwenden und wie gesagt mit meinem Tipp würdest du zumindest eine Fehlermeldung erhalten. Gerade wenn du mit PHP programmierst sollte es für dich normal sein Werte zu überprüfen, alles andere ist schlampiger stil, der eben zu solchen Problemen führt und dich letztendlich mehr Zeit kostet (und in dem Falle auch unsere)

                    Struppi.

  2. Hi,

    hab ein neues Problem - wieder bricht das JavaScript ab!

    Folgende Zeile:

    entfernung = sqrt(pow(4 - parseFloat(getval('b_tx')), 2)*pow(9 - parseFloat(getval('b_ty')), 2));

    Schon mal vielen Dank im Voraus... b_tx und b_ty sollten doch vorhanden sein, oder?

    alert(getval('b_tx'));

    wird auch nicht ausgeführt...

    Vielen Dank schon im Voraus...

    E7

    <script type="text/javascript" language="javascript">
    <!--
    function getval(id) {
     return document.getElementById(id).value;
    }

    function setval(id, value) {
     document.getElementById(id).innerHTML = value;
    }

    function recalc() {
     var nahrung = 0;
     var max_speed = 0;
     var anzahl = 0;
     var entfernung = 0;
     var rst = new Array(0, 0, 0, 0, 0, 0);
     for (i = 0; i < 3; i++) {
      a = parseFloat(getval('b_menge_' + i));
      if (a > 0) {
       w = getval('b_werte_' + i);
       w = w.split("|");
       anzahl += a;
       if (parseFloat(w[1]) > max_speed) max_speed = parseFloat(w[1]);
       nahrung += a*parseFloat(w[0]);
       for (c = 0; c < 6; c++) {
        rst[c] += a*parseFloat(w[6+c]);
       }
      }
     }
     entfernung = sqrt(pow(4 - parseFloat(getval('b_tx')), 2)*pow(9 - parseFloat(getval('b_ty')), 2));
     setval('ehgesamt', anzahl);
     setval('nahrungsverbrauch', nahrung*1);
     setval('geschwindigkeit', max_speed);
     setval('ges_nahrung', entfernung*nahrung*1);
     setval('ges_minuten', entfernung*max_speed*60);
     for (c = 0; c < 6; c++) {
      setval('m_' + (c + 1), rst[c]);
     }
    }
    //-->
    </script>
    <form method="post">
    <table with="100%" class="tabellenrahmen" style="text-align: center; ">
    <tr class="tabellenkopf"><td>Bewegen</td><td>Typ</td><td>Max</td><td>Futter</td><td>Speed</td><td>&nbsp;</td><td>Nahrung</td><td>Holz</td><td>Stein</td><td>Metall</td><td>Schwefel</td><td>GG</td></tr>

    <tr><td><input type="text" size="6" onchange="recalc();" id="b_menge_0"/><input type="hidden" id="b_ehname_0" value="faustkämpfer"/><input type="hidden" id="b_werte_0" value="1|1|5|10|0|0|3|3|3|3|3|0"/></td><td>Faustkämpfer</td><td>998</td><td>1</td><td>1</td><td>&nbsp;</td><td>3</td><td>3</td><td>3</td><td>3</td><td>3</td><td>0</td><td></td></tr>
    <tr><td><input type="text" size="6" onchange="recalc();" id="b_menge_1"/><input type="hidden" id="b_ehname_1" value="schlagkräftiger_sammler"/><input type="hidden" id="b_werte_1" value="2|4|5|4|0|0|3|3|3|3|3|1"/></td><td>Schlagkräftiger sammler</td><td>101</td><td>2</td><td>4</td><td>&nbsp;</td><td>3</td><td>3</td><td>3</td><td>3</td><td>3</td><td>1</td><td></td></tr>

    <tr><td><input type="text" size="6" onchange="recalc();" id="b_menge_2"/><input type="hidden" id="b_ehname_2" value="kampfbulle"/><input type="hidden" id="b_werte_2" value="2|1.5|40|50|0|0|3|3|3|3|3|0"/></td><td>Kampfbulle</td><td>10</td><td>2</td><td>1.5</td><td>&nbsp;</td><td>3</td><td>3</td><td>3</td><td>3</td><td>3</td><td>0</td><td></td></tr>
    <tr><td><span id="ehgesamt">0</span></td><td>&nbsp;</td><td>&nbsp;</td><td><span id="nahrungsverbrauch">0</span></td><td><span id="geschwindigkeit">0</span></td><td>&nbsp;</td><td><span id="m_1">0</span></td><td><span id="m_2">0</span></td><td><span id="m_3">0</span></td><td><span id="m_4">0</span></td><td><span id="m_5">0</span></td><td><span id="m_6">0</span></td></tr>

    </table>
    <p><b>Bewegen nach:<br/></b>X: <input type="text" id="b_tx" size="4" onchange="recalc();"/>, Y: <input type="text" id="b_ty" size="4" onchange="recalc();"/><br/>
    <b>Gesamtverbauch:<br/></b>
    Nahrung: <span id="ges_nahrung">0</span><br/>
    Minuten: <span id="ges_minuten">0</span> Sekunden</p>

    1. Hi E7,

      och menno (bitte, bitte lies doch auch mal dir Warnhinweise Deines Browsers [IE Statuszeile unten links auf die Fehlermeldung klicken und Deteils wählen][Mozilla die JavaScript-Konsole aktivieren])

      sqrt() scheint es nicht zu geben...

      Gruß aus Berlin!
      eddi

      1. Hi,

        [Mozilla die JavaScript-Konsole aktivieren]

        Oh, kannte ich bisher noch gar nicht, scheint allerdings recht hilfreich zu sein... Danke für den Hinweis!

        sqrt() scheint es nicht zu geben...

        Aber math.sqrt... Recht umständlich wenn man math. angeben muss... Naja, trotzdem Danke für deine Hilfe!

        E7