What's the problem?

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

  • What's the problem?

    Code:
    <input size=3 maxlength=3 value=1 name=num1 onChange=changenum1()></input> .
      <select name=num1x onChange=transmitter()>
       <option value=a>A</option>
       <option value=b selected>B</option>
       <option value=c>C</option>
      </select>
    Folgendes Problem zu obigem Code:
    Das Eingabefeld soll nur den Wert in einem Hidden-Input ändern. Das macht er aber nur, wenn ich danach noch am select-tag etwas ausführe.
    D.h. es wird das value von 'num1' erst aktualisiert, wenn danach noch 'num1x' auf A,B oder C gestellt wird. In der Funktion transmitter ist aber gar nichts, was mit 'num1' zu tun hat.

    Funktion changenum1:
    Code:
    function changenum1()
    {
    	parent.cycleto.document.cycle.num1.value=document.every.num1.value;
    }

  • #2
    Re: What's the problem?

    Code:
    <input size=3 maxlength=3 value=1 name=num1 onChange=changenum1()></input> .
    1. gib einen typ für das input feld mit an, in diesem fall type="hidden".
    2. einen schliessenden tag </input> gibt es nicht.

    Code:
    Das Eingabefeld soll nur den Wert in einem Hidden-Input ändern. Das macht er aber nur, wenn ich danach noch am select-tag etwas ausführe.
    D.h. es wird das value von 'num1' erst aktualisiert, wenn danach noch 'num1x' auf A,B oder C gestellt wird. In der Funktion transmitter ist aber gar nichts, was mit 'num1' zu tun hat.
    du rufst transmitter() mit onchange auf, also dann, wenn am select-feld der wert geändert wurde. works as designed, würde ich sagen ;-)

    und was macht es für einen sinn, in einem versteckten input-feld eine funktion onchange aufzurufen? das feld ist nicht sichtbar, ziemlich unwahrscheinlich also, dass der user den wert ändert.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Sorry, war nicht ausführlich genug beschrieben.
      Ich habe ein Eingabefeld und ein Optionsfeld. Beide sollen ihre Werte in ein Hidden-Feld in einem anderen Frame speichern, um sie an die nächste Seite übergeben zu können.
      Das Optionsfeld führt die Veränderungen auch aus (transmitter()). Die Änderungen des Eingabefeldes werden aber erst übernommen, wenn man danach das Optionsfeld noch ändert.
      Wieso? Verstehe ich nicht, da onChange doch heisst, dass es beim Wechseln des Wertes ausgeführt wird.
      Wird das Problem jetzt klarer?

      Wieso gibt es kein Schluss-Tag für Inputfelder? Ist das allgemein so, oder nur bei type=hidden?

      Kommentar


      • #4
        Das Optionsfeld führt die Veränderungen auch aus (transmitter()). Die Änderungen des Eingabefeldes werden aber erst übernommen, wenn man danach das Optionsfeld noch ändert.
        Wieso? Verstehe ich nicht, da onChange doch heisst, dass es beim Wechseln des Wertes ausgeführt wird.
        wie sieht der code der funktion transmitter aus?

        Wieso gibt es kein Schluss-Tag für Inputfelder? Ist das allgemein so, oder nur bei type=hidden?
        nein, das ist generell so beim <input>-tag.
        bei z.b. einem absatz hast du einen öffnenden tag <p> und einen schliessenden tag </p>, weil du dort ja den text der im absatz stehen soll dazwischen schreibst.

        aber bei einem <input>-feld gibt es keinen text dazwischen zu schreiben, deshalb macht auch ein schliessender tag keinen sinn, und es gibt ihn auch nicht im html standard.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Schaden tut das schließende Tag aber auch nicht, weil ich es jetzt überall so gemacht habe und trotzdem alles funktioniert.

          transmitter():
          Code:
          function transmitter()
          {
           parent.cycleto.document.cycle.num1x.value=document.every.num1x.value;
           parent.cycleat.document.open();
           parent.cycleat.document.writeln("<head><link rel=\"stylesheet\" href=\"CorpID.css\" type=\"text/css\"></link>");
           if(document.every.num1x.value=='w')
           {
            parent.cycleat.document.writeln("<script language=JavaScript>");
            parent.cycleat.document.writeln("function transnum2(){");
            parent.cycleat.document.writeln(" var num2=0;");
            parent.cycleat.document.writeln(" if(document.num2n.num21.checked){num2+= 1;}");
            parent.cycleat.document.writeln(" if(document.num2n.num22.checked){num2+= 2;}");
            parent.cycleat.document.writeln(" if(document.num2n.num23.checked){num2+= 4;}");
             .
             .
             .  
            parent.cycleat.document.writeln(" parent.cycleto.document.cycle.num2d.value=num2;}</script>");
           }
           parent.cycleat.document.writeln("</head><body>");
           if(document.every.num1x.value=='m')
           {
            parent.cycleto.document.cycle.num2.value=parent.cycleto.document.cycle.md.value;
            parent.cycleto.document.cycle.num2d.value=0;
            parent.cycleat.document.writeln("am <input size=2 maxlength=2 value='"+parent.cycleto.document.cycle.num2.value+"' name=num2 onchange=parent.cycleto.document.cycle.num2.value=value></input> .");
            parent.cycleat.document.writeln("<select name=num2d onchange=parent.cycleto.document.cycle.num2d.value=value>");
            parent.cycleat.document.writeln(" <option value=0>Tag       </option>");
            parent.cycleat.document.writeln(" <option value=1>Montag    </option>");
            parent.cycleat.document.writeln(" <option value=2>Dienstag  </option>");
             .
             .
             .
            parent.cycleat.document.writeln("</select>");
           }
           if(document.every.num1x.value=='w')
           {
            parent.cycleto.document.cycle.num2d.value=Math.pow(2,parent.cycleto.document.cycle.wd.value-1);
            parent.cycleat.document.writeln("<table align=left border=0 cellpadding=0 cellspacing=0><form name=num2n>");
            parent.cycleat.document.writeln("<tr><td><input type=checkbox onclick=transnum2() name=num21 ",parent.cycleto.document.cycle.wd.value==1?" checked>Montags    </input></td></tr>":">Montags    </input></td></tr>");
            parent.cycleat.document.writeln("<tr><td><input type=checkbox onclick=transnum2() name=num22 ",parent.cycleto.document.cycle.wd.value==2?" checked>Dienstags  </input></td></tr>":">Dienstags  </input></td></tr></form>");
             .
             .
             .
            parent.cycleat.document.writeln("</table>");
           }
           parent.cycleat.document.writeln("<input type=button name=sub value=Ok onClick=\"parent.cycleto.document.cycle.submit();\">");
           parent.cycleat.document.writeln("</input><input type=button style=\"padding:0px;width:120px\" value=Abbruch name=Cancel
               onClick=\"for(var zahl=0;parent.cycleto.document.cycle.historynum.value>(zahl-1);zahl++){history.back();}\"></input>");
           
           if(parent.cycleto.document.cycle.historynum.value>1){parent.cycleto.document.cycle.historynum.value++;}
           
           parent.cycleat.document.close();
          }
          Aber diese Funktion hat ja prinzipiell nichts mit 'num1' zu tun. Verstehe nicht, wieso das erst dann geändert wird, wenn transmitter() ausgeführt wird.
          transmitter() lädt jedesmal ein weiteres Frame neu, da dessen Darstellung vom Select abhängig ist.
          Zuletzt geändert von LazyLow; 28.10.2002, 10:26.

          Kommentar


          • #6
            Schaden tut das schließende Tag aber auch nicht, weil ich es jetzt überall so gemacht habe und trotzdem alles funktioniert.
            ernsthaftes webdesign zu betreiben heisst aber, sich möglichst an den standards zu orientieren, und keine tags die es nicht gibt im quellcode stehen zu lassen, nur weil es "trotzdem alles funktioniert" ;-)

            Aber diese Funktion hat ja prinzipiell nichts mit 'num1' zu tun. Verstehe nicht, wieso das erst dann geändert wird, wenn transmitter() ausgeführt wird.
            transmitter() lädt jedesmal ein weiteres Frame neu, da dessen Darstellung vom Select abhängig ist.
            beschreib bitte nochmal genauer, was du eigentlich erreichen willst.

            also, über das select-feld willst du eine auswahl treffen, die dann in das versteckte input-feld hineingeschrieben wird, richtig?

            wozu soll das gut sein, warum fragst du nicht direkt ab, worauf das select-feld steht?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Also:

              Ich habe drei Frames (oben, links unten, rechts unten), was sich darstellungstechnisch eben anbietet. Im oberen habe ich ein 'form'-tag.
              In diesem werden die gesamten Daten der Auswahlfelder von allen drei Frames gespeichert und dann an die nächste Seite weitergeleitet, wo sie geprüft/verarbeitet werden.
              Per <body onLoad=bla.php> wird das linke untere Frame geladen.
              Dort wird mittels transmitter(), also Javascript, das rechte untere Frame geladen.
              Das mache ich, weil von dem SELECT abhängt, welche weiteren Menüpunkte im dritten Frame angezeigt werden und somit auswählbar sind. Und sobald man die Auswahl links unten ändert, sollen rechts die zugehörigen weiteren Auswahlpunkte angezeigt werden.
              Das funktioniert allerdings nur, wenn der Javascript-Teil so 'auskommentiert' ist:
              Code:
              <!-- transmitter(){}-->
              Wieso schreibt er ihn sonst einfach als Text in das linke untere Frame?
              Was bedeutet '<!--' und '-->' genau?

              Verstehst du jetzt was ich machen will?

              Kommentar


              • #8
                Das funktioniert allerdings nur, wenn der Javascript-Teil so 'auskommentiert' ist:
                Code:
                <!-- transmitter(){}-->
                Was bedeutet '<!--' und '-->' genau?
                so kennzeichnet man in html kommentare.

                <!-- dies ist ein kommentar -->

                diese werden nicht in der seite angezeigt, sind aber im quelltext als zusätzliche erläuterungen trotzdem sichtbar.

                eigentlich soll man javascript auch immer auskommentieren, damit ältere browser, die kein javascript können, das nicht dann als text anzeigen.
                <script type="text/javascript">
                <!--
                (...javascript-anweisungen...)
                -->
                </script>


                kannst du deine beispielseite mal irgendwo online stellen, damit man sich das mal in ruhe ankucken kann?
                mit diesen bruchstückhaften informationen fällt mir jetzt nämlich auch nichts ein, was weiterhelfen könnte.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Nee, das geht leider nicht.
                  Habe keine Möglichkeit das online zu stellen.
                  Aber eine kurze Frage würde ich noch gerne beantwortet haben.
                  Wie groß dürfen Formulare sein, die du an die nächste Seite übergibst?Unendlich groß?
                  Wird dann der Server, auf dem das läuft, dadurch stark beansprucht?

                  Kommentar


                  • #10
                    Einen Versuch mach ich noch und poste hoffentlich jeden relevanten Code


                    Oberes Frame (cycleto), Datei cycleto.html:
                    Code:
                    <body onLoad="parent.cycleevery.location.href='cycleevery.html';">
                     <form name=cycle action="checkdata.php">
                      <input type=hidden name="input" value=1>
                      <input type=hidden name="select" value=w>
                       .
                       .
                       .
                     </form>
                    </body>
                    Linkes Frame (cycleevery), Datei cycleevery.html:
                    Code:
                    <html><head><title>Eintrag Cyclen</title>
                    <link rel="stylesheet" href="CorpID.css" type="text/css"></link>
                    <script language="JavaScript"><!--
                    function transmitter()
                    {
                     parent.cycleto.document.cycle.num1x.value=document.every.num1x.value;
                     parent.cycleat.document.open();
                     parent.cycleat.document.writeln("Hier dann eben der Code, der in das dritte Frame geladen wird, abhängig von 'num1x'.
                       Wen es genauer interessiert kann weiter oben schauen, hat aber mit dem Problem nicht direkt was zu tun.");
                     parent.cycleat.document.writeln("<input type=button name=\"ok\" value=\"ok\" onClick=\"parent.cycleto.document.cycle.submit();\">");
                     parent.cycleat.document.close();
                    }
                    --></script>
                    </head>
                    <body onLoad="transmitter()">
                    <form name=every>
                     jede/jeden
                      <input size=3 maxlength=3 value=1 name=input onChange="parent.cycleto.document.cycle.input.value=document.every.input.value"> .
                      <select name=select onChange=transmitter()>
                       <option value=d>Tag</option>
                       <option value=w selected>Woche</option>
                       <option value=m>Monat</option>
                      </select>
                     </form>
                    </body>
                    </html>
                    Beachtet bitte nur das jetzt gepostete.
                    Ich denke das müsste ausreichen das Problem zu lösen, wenn es überhaupt eine Lösung gibt.

                    So und jetzt nochmal das Problem:
                    Die Seite macht beinahe alles, was sie soll. Wenn man bei SELECT etwas anderes auswählt, dann lädt sie per transmitter() das dritte Frame. (Wunderbar!)
                    Wenn ich aber in das Eingabefeld etwas anderes reinschreibe, dann führt es das, was bei onChange steht ersteinmal nicht aus. Sondern erst, wenn ich etwas am SELECT verändere. Obwohl da doch nirgends was von input steht.

                    Wenn es jetzt keiner rauskriegt, dann weiss ich auch nicht mehr weiter.
                    Leider kann ich es nicht online stellen. Hab es alles nur lokal auf dem Rechner und nicht mal noch keine eigene Homepage, die online ist.

                    "Von meiner Homepage soll auch nur ich etwas haben!" ;-)

                    Wenn sich jemand 5 Minuten Arbeit macht und das im kleinen auf seinem PC nachbastelt würde ich mich freuen.
                    Code:
                    <frameset rows="160,*" border=0>
                      <frame src="cycleto.html" name="cycleto"
                       <frameset cols="240,*" border=0>
                        <frame src="empty.html" name="cycleevery">
                        <frame src="empty.html" name="cycleat">
                      </frameset>
                     </frameset>
                    Dann einfach noch einen Head in cycleto.html hinzufügen und in checkdata.php das 'input' ausgeben.
                    Zuletzt geändert von LazyLow; 28.10.2002, 17:07.

                    Kommentar


                    • #11
                      Kann mir keiner weiterhelfen? Schade! Naja, auch egal!

                      Eine Frage noch: Wie kann ich ein Formular aus einem Child-Frame an das Parent-Frame schicken. Also, dass die Seite, die aufgerufen wird, nicht in dem Frame erscheint, in dem sich das Formular befindet, sondern sich in das Parent-Frame lädt.

                      So lädt es sich in das 'eigene' Frame:
                      <form name=bla action="blabla.php" method=post>

                      So geht es nicht:
                      <form name=bla action="parent.location.href='blabla.php'" method=post>

                      Kommentar


                      • #12
                        mit target="Framename" also
                        <form name=bla action="blabla.php" target="Framename" method=post>

                        php-Entwicklung | ebiz-consult.de
                        PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
                        die PHP Marktplatz-Software | ebiz-trader.de

                        Kommentar


                        • #13
                          Kann mir keiner weiterhelfen? Schade! Naja, auch egal!
                          geduld, mein freund, geduld :-)


                          also ich hab jetzt mal dein beispiel hier bei mir auf dem rechner nachgebaut, und ich muss sagen es funktioniert.

                          der wert im oberen frame wird geändert, wenn ich im unteren frame im input-feld eine eingabe gemacht habe
                          - wobei hier die vergangenheitsform zu beachten ist :-)

                          onchange greift bei einem input-feld erst dann, wenn die änderung des wertes abgeschlossen ist
                          - und dies geschieht erst dann, wenn man das feld wieder verlässt!
                          zum beispiel in dem man irgendwo in die seite klickt, in dem man return drückt, oder per [tab] zum nächsten formularfeld springt.


                          aber dir kann geholfen werden :-)

                          verwende statt onchange im input-feld mal
                          onKeyup="parent.cycleto.document.cycle.input.value=document.every.input.value"


                          ...und staune :-)
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Dabei öffnet der Browser aber ein komplett neues Fenster.

                            target="parent"
                            target="parent.location.href"

                            Er soll es in das Hauptfenster laden und kein neues Fenster öffnen.

                            Kommentar


                            • #15
                              @wahsaga:
                              In einem Punkt kann ich dir nicht Recht geben. In diesem Fall hatte es auch nichts gebracht, wenn ich das Eingabefeld verlassen, oder irgendetwas anderes editiert habe. Erst, wenn ich das Select-Feld geändert hatte, hat sich der Wert verändert.
                              Aber vielen Dank, mit onKeyup funktioniert es bestens.

                              Kommentar

                              Lädt...
                              X