Sonja Kunz: Loop

Kann mir jemand helfen wie ich folgendes mit JavaScript lösen kann?
               Aus "CallTo" soll durch einen Loop "CallTo1", "CallTo2", usw.
               entstehen.

function chkFormular()

var chkZ = 1;
               for(i=0;i((kleiner als) ausschreibe es aus, damit es sicher als
               Text ausgegeben wird!)document.Formular.CallTo1.value.length;++i)
               if(document.Formular.CallTo1.value.charAt(i) "9")
               chkZ = -1;
               if(chkZ == -1)

alert("Eingabe keine Zahl!");
               document.Formular.CallTo1.focus();
               return false;

Vielen Dank!
               Sonja

Vielen Dank!
               Sonja

  1. Hallo Sonja!

    Sorry, kannst Du bitte nochmal ausfuehrlich und auf Deutsch schreiben, was Du willst? Aus Deinem angedeuteten Code werde ich jedenfalls nicht so richtig schlau. Welche Formularelemente willst Du ueberpruefen, und was soll bei denen ueberprueft werden?

    Calocybe

    1. Hallo Sonja!

      Sorry, kannst Du bitte nochmal ausfuehrlich und auf Deutsch schreiben, was Du willst? Aus Deinem angedeuteten Code werde ich jedenfalls nicht so richtig schlau. Welche Formularelemente willst Du ueberpruefen, und was soll bei denen ueberprueft werden?

      Calocybe

      Hallo!

      Also, mit einem ColdFusion-Loop (CallTo#rowcnt#) frage ich in der Datenbank Preise ab,
      resp. trage sie ein.
      Nun möchte ich, dass wenn jemand Buchstaben statt Zahlen eingeben will, eine
      alert-Meldung ausgegeben wird.
      Das mit der Ausgabe der alert-Meldung klappt, wenn ich den ganzen Code mehrere Male eingebe mit CallTo1, CallTo2, usw. Da es aber mehr als fünfzig Einträge sind die überprüft werden sollen, wäre es schön wenn ich aus CallTo eine Variable machen könnte.

      Hoffe dass ich es dieses Mal besser erklären konnte. Sorry!

      Liebe Grüsse
      Sonja

      1. Hi!

        Ok, diesmal war's schon verstaendlicher. *g* Du hast also eine Anzahl y Textfelder (INPUT TYPE=TEXT), die die Namen CallTo1 bis CallToy tragen, die Du daraufhin ueberpruefen willst, ob eine Zahl und nichts anderes drin steht.

        var NUMBER_OF_CALLTO_INPUTS = 50;       // Anzahl y der zu ueberpruefenden Textfelder

        function chkTextInput(input) {
            return (!isNaN(parseInt(input.value, 10)));
        }

        function chkFormular() {
            var i;
            var input;
            
            for (i=1; i<=NUMBER_OF_CALLTO_INPUTS; i++) {
                input = eval("document.Formular.CallTo" + i);   // erzeugt Referenz auf ein element (<../../tecbbda.htm>)
                if (!chkTextInput(input)) {
                    alert("Keine Zahl eingegeben in Element " + input.name + "!");
                    input.focus();
                    return false;
                }
            }
            
            return true;
        }

        Falls Du die Anzahl der Elemente im vorneherein nicht weisst, musst Du statt der obigen For-Schleife eine Konstruktion aehnlich folgender verwenden:

        for (input in document.Formular.elements) {
                if (input.name.substring(0, 6) != "CallTo") next;   // alle ueberspringen, die nicht mit "CallTo" beginnen
                if (!chkTextInput(input)) {
                    alert("Keine Zahl eingegeben in Element " + input.name + "!");
                    input.focus();
                    return false;
                }
            }

        Wie parseInt() auf leere Zeichenketten reagiert, also wenn nichts in ein Textfeld eingegeben wurde, weiss ich nicht. Notfalls musst Du in der chkTextInput()-Funktioon das noch extra pruefen.

        Calocybe

        1. Hallo Calocybe!

          Vielen Dank für Deine Hilfe!
          Läuft jetzt so wie ich es wollte!

          Habe nur noch ein kleines Problem, da ich JavaScript-Anfängerin bin.
          Ausser "CallTo" habe ich auch noch "CallFrom" im gleichen Formular.
          Schaffe es nicht dies zusätzlich einzubauen.
          Dürfte ich Dich noch um einen Tip diesbezüglich bitten?
          Wäre sehr froh darüber!

          Danke
          Sonja

          1. Hi again!

            Ausser "CallTo" habe ich auch noch "CallFrom" im gleichen Formular.
            Schaffe es nicht dies zusätzlich einzubauen.

            Ich nehme an, es gibt nur ein einziges CallFrom? Dann kannst Du mit document.Formular.CallFrom genau so eine Referenz erzeugen, die Du an chkTextInput() uebergeben kannst. Im Klartext heisst das, Du musst in der chkFormular()-Funktion VOR oder HINTER der For-Schleife, aber nicht innerhalb derselben, sowas ungefaehr einfuegen:

            if (!chkTextInput(document.Formular.CallFrom)) {
                    alert("Keine Zahl eingegeben in Element CallFrom!");
                    document.Formular.CallFrom.focus();
                    return false;
                }

            (Die Abfrage "if (!chkTextInput(document.Formular.CallFrom))" ist uebrigens gleichbedeutend mit "if (chkTextInput(document.Formular.CallFrom) == false)".)

            Calocybe

            1. Hi Calocybe!

              Ich nehme an, es gibt nur ein einziges CallFrom?

              ---> Nein, es war das gleiche Problem wie bei CallTo, habe es aber geschafft, dank Deiner Hilfe!

              Vielen herzlichen Dank, es läuft!

              @>-->--
              Sonja

  2. Moin!

    Also wenn ich das Code-WirrWarr richtig deute willst Du ueberpruefen ob eine Zahl eingegeben wurde, und das dann bei mehreren Textfeldern?

    Wenn ja, dann vergib keine Namen fuer die Textfelder. Dann kannst Du sie ueber document.form.text[index] ansprechen.

    Hope this helps

    Mirco

    1. Hi Mirco

      Wenn ja, dann vergib keine Namen fuer die Textfelder. Dann kannst Du sie ueber document.form.text[index] ansprechen.

      Kannst du "benamte" Objekte nicht trotzdem über den Index ansprechen?

      Grüße
        Andreas

      1. Hi Andreas!

        Kannst du "benamte" Objekte nicht trotzdem über den Index ansprechen?

        Ich hab das mit benannten Objekten  noch nicht ausprobiert.
        Aber eigentlich muesste das bei Textfeldern auch klappen, denn es klappt auf jeden Fall bei Radio-Buttons.

        Schoene Gruesse
           Mirco

    2. Moin!

      Also wenn ich das Code-WirrWarr richtig deute willst Du ueberpruefen ob eine Zahl eingegeben wurde, und das dann bei mehreren Textfeldern?

      Hallöchen

      Ne andere Möglichkeit, die mit den Namen arbeitet, ist, daß du den Befehl eval(Schleifenzaehler)
      (<../../tecm.htm#a2> )
      verwendest.
      Damit bekommst du den aktuellen Wert des Schleifenzählers, den du an CallTo anhängen kannst..

      Positively

      Lorenz