jörg: Frage zum Wiki-Artikel „Variable“ /Übergabe an Inputfeld als Vorgabe

problematische Seite

Hallo,

ich habe in in einer config.ini (es ist eine js-Datei) Variablen deklariert, wie var ust1 = 19; Die Datei ist in der HTML-Datei eingebunden. In dieser steht dann:

<script src= "config.ini"> </script>
.... etwas weiter unten dann:

    <div id="steuerdat">
    <p>Steuerinformationen: <br></p>
    <script> ustzuweisen() </script>  
    <p>
    <label for="ust1a">Ust 1 </label>
    <input type="text" name="ust1a" size="8" id="ust1b" maxlength="40">
    </p>
   </div>

Ich habe bisher im Internet nichts gefunden, was darauf hinweist, wie man nun diese Variable als Vorgabewert (mit der man dann weiterechnen kann) an das Inputfeld übergibt. Habe alles versucht, wie z.B.

window.document.getElementById("steuerdat").getElementByName("ust1b").write = ust1

oder auch .value, oder .innerhtml. Nichts hat funktioniert.

die Funktion ustzuweisen ist in einer Extradatei = berechnen.js.

Das heißt, die Funktion holt sich aus config.ini die Variable ust1 und weist sie dann dem Inputfeld zu.

Das Feld bleibt leer… was ich auch eintrage. Habe sogar schon Merkerbuchstaben vergeben (a+b), um verschiedene ID's zu haben... keine Chance. Die beiden Dateien werden eingebunden, Test erfolgreich. Daran liegt es also nicht. Hat jemand eine Lösung dafür? Danke für die Hilfe. MFG jörg

  1. problematische Seite

    Tach!

    <script src= "config.ini"> </script>
    .... etwas weiter unten dann:
    
        <div id="steuerdat">
        <p>Steuerinformationen: <br></p>
        <script> ustzuweisen() </script>  
        <p>
        <label for="ust1a">Ust 1 </label>
        <input type="text" name="ust1a" size="8" id="ust1b" maxlength="40">
        </p>
       </div>
    

    Ich habe bisher im Internet nichts gefunden, was darauf hinweist, wie man nun diese Variable als Vorgabewert (mit der man dann weiterechnen kann) an das Inputfeld übergibt.

    Wirklich nicht? Wie bist du dann auf die nachfolgenden Versuche gekommen, die zumindest in die Richtung der Lösung gehen?

    window.document.getElementById("steuerdat").getElementByName("ust1b").write = ust1 oder auch .value, oder .innerhtml.

    Zum einen hat das Input-Feld eine id, die dokumentweit eindeutig sein muss. Darüber kannst du das Feld direkt ansprechen, ohne über das div gehen zu müssen. Das div macht die Sache nicht eindeutiger als sie bereits ist.

    Zum anderen können deine Versuche nicht erfolgreich sein, weil das div mit der id steuerdat nur ein Element mit dem Namen ust1a enthält, du aber ust1b haben möchtest. Wenn man es richtig macht - egal ob mit direkten document.getElementById("ust1b") oder über deine Variante aber mit richtigem Namen - kann man anschließend auf das value zugreifen. innerHTML (auch wenn es richtig geschrieben wäre) ist bei einem input-Element nicht verfügbar, da es ein Element ohne Inhalt ist.

    Übrigens haben Browser heutzutage eingebaute Entwicklertools mit einer Konsole an Bord. In die kann man auch Javascript-Code direkt eintippen und ausführen. So zum Beispiel document.getElementById("steuerdat"), und man sieht nach dem Enter, dass das etwas zurückliefert wird. Dann weiter mit document.getElementById("steuerdat").getElementByName("ust1b"), und nun müsste man sehen, dass es dabei kein Ergebnis gibt. Dabei sollte man aufmerken und die Geschichte genauer untersuchen.

    dedlfix.

  2. problematische Seite

    hallo

    Hallo,

    ich habe in in einer config.ini (es ist eine js-Datei) Variablen deklariert, wie var ust1 = 19; Die Datei ist in der HTML-Datei eingebunden. In dieser steht dann:

    <script src= "config.ini"> </script>
    .... etwas weiter unten dann:
    
        <div id="steuerdat">
        <p>Steuerinformationen: <br></p>
        <script> ustzuweisen() </script>  
    

    Das ist aus mehrfacher Sicht unschön. Es weist nämlich darauf hin, dass deine Funtion als Methode des window objects geschrieben wurde. Normalerweise kapselt man den Code ab und exportiert dann einzele Methoden als Teil eines einzigen Objects, wie zum Beispiel. myOb.ustzuweisen

    Weiter ist es icht toll, wenn Javascript während dem Parsen bereits im DOM rumrödelt.

    Normaleweise schreibt man eine Methode window.addEventListener("load", myApp.init); wobei init eine Initialisierungsmethode ist, die innerhalb von myApp definiert wurde.

    In init würde man dann auf das gewünschte Element zugreifen,

    myInput = document.gelElementById("ust1a")
    myInput.value = myApp.ustzuweisen();
    
        <p>
        <label for="ust1a">Ust 1 </label>
        <input type="text" name="ust1a" size="8" id="ust1b" maxlength="40">
        </p>
       </div>
    

    Ich habe bisher im Internet nichts gefunden, was darauf hinweist, wie man nun diese Variable als Vorgabewert (mit der man dann weiterechnen kann) an das Inputfeld übergibt.

    Dein gesauchtes Attribut heisst value

    Habe alles versucht, wie z.B. window.document.getElementById("steuerdat").getElementByName("ust1b").write = ust1 oder auch .value, oder .innerhtml. Nichts hat funktioniert. die Funktion ustzuweisen ist in einer Extradatei = berechnen.js.

    Offensichtlich gibt es ein Problem mit dem Ablauf des Scrips. Du solltest Scripte in aller Regel erst ausführen, wenn das DOM fertig gerendert ist.

    1. problematische Seite

      @@beatovich

      myInput = document.gelElementById("ust1a")
      myInput.value = myApp.ustzuweisen();
      

      myInput aber nicht als globale Variable, sondern (wenn die Variable nicht schon vorher deklariert wurde):

      var myInput = document.gelElementById("ust1a");
      

      oder

      var myInput = document.querySelector("#ust1a");
      

      in modernen Browsern:

      const myInput = document.querySelector("#ust1a");
      

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
  3. problematische Seite

    @@jörg

        <label for="ust1a">Ust 1 </label>
        <input type="text" name="ust1a" size="8" id="ust1b" maxlength="40">
    

    Und niemandem der Antwortenden fällt auf, dass das Eingabefeld keine Beschriftung hat. 😡

    Das for-Attribut des labels bezieht sich auf die id des Eingabefelds, nicht auf dessen name. Es müsste also for="ust1b" heißen.

    Du kannst aber für name und id denselben Bezeichner verwenden: <input name="ust1" name="ust1">

    BTW, type="text" kannst du angeben, ist aber nicht notwendig.

    Habe alles versucht, wie z.B. window.document.getElementById("steuerdat").getElementByName("ust1b").write = ust1 oder auch .value, oder .innerhtml. Nichts hat funktioniert.

    Irgendwelche Phantasie-Eigenschaften werden auch nicht funktionieren. write gibt’s nicht, innerhtml auch nicht. innerHTML gibt’s, kann aber nicht funktionieren, weil input ein leeres Element ist, also keinen Inhalt hat.

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    1. problematische Seite

      Tach!

      Und niemandem der Antwortenden fällt auf, dass das Eingabefeld keine Beschriftung hat. 😡

      Der Satz ist widersprüchlich, oder bist du kein Antwortender?

      Das for-Attribut des labels bezieht sich auf die id des Eingabefelds, nicht auf dessen name. Es müsste also for="ust1b" heißen.

      Vielleicht muss eher die id="ust1a" heißen, denn das b könnte auch lediglich ein Tippfehler/Kopierfehler sein.

      dedlfix.