Samuel Vogel: Formular und prompt

Hallo Forum,

Ich würde gerne beim Abschicken eines Formulars noch ein prompt() öffnen, dessen Daten auch mit denen des Formulars an die naechste Seite übergeben werden.

Beispiel: Ich hab ein Forumlar in dem nur checkboxen existieren. Jetzt werden einige davon aktiviert und man klickt auf abschicken. Jetzt soll ein Javascript prompt() kommen in dem man noch eine zusaetzliche information angibt, die dann auch auf der naechsten Seite durch PHP "benutzbar" ist.

Vielen Dank für eure Tips!!

so long,
Samy

  1. Moin

    ob das so sinnig ist?

    schaff ein input-feld vom type "hidden"
    bei onsubmit rufst du ein Script auf
    das liest die Eingabe von prompt aus und packt ihn in das verborgene input-feld.
    Script wird mit return true beendet.

    Der Inhalt aller Formular-Elemente wird übergeben, incl. dem "hidden"-feld.

    Gruß
    rfb

    1. Hehe,
      genau das hab ich gepostet :)
      Ach ja, du musst in der php-Datei überprüfen ob er Inhalt des hidden-Inputs auch ungleich "" ist bzw ungleich dem Wert den du als Standardwert einträgst.

      1. Moin
         > Hehe,

        genau das hab ich gepostet :)

        aber ich 4 Std. früher ;-)

        Gruß
        rfb

        1. Ja hab ich nachher auch gesehen :)
          Aber nachdem ich gesehen hab was Mathias Brodala geantwortet hat hab ich erst gar nicht mehr weitergelesen hehe

  2. Hallo Samuel.

    Ich hab ein Forumlar in dem nur checkboxen existieren. Jetzt werden einige davon aktiviert und man klickt auf abschicken. Jetzt soll ein Javascript prompt() kommen in dem man noch eine zusaetzliche information angibt, die dann auch auf der naechsten Seite durch PHP "benutzbar" ist.

    Ich persönlich fände diese Bedienung ziemlich hakelig und wenig benutzerfreundlich. Daher mache ich dir einen anderen Vorschlag:

    HTML: Füge in dein Formular alle Checkboxen und, wo erforderlich, Eingabefelder ein:

    <form action="script.php" method="post">  
      <p>  
        <label>Foo: <input type="checkbox" name="foocheck" /></label>  
        <input type="text" name="foo" />  
      </p>  
      <p>  
        <label>Bar: <input type="checkbox" name="barcheck" /></label>  
        <input type="text" name="bar" />  
      </p>  
      <p>  
        <label>Baz: <input type="checkbox" name="bazcheck" /></label>  
        <input type="text" name="baz" />  
      </p>  
      <p><input type="submit" /></p>  
    </form>
    

    JavaScript: Blende beim Laden erst einmal alle Eingabefelder in deinem Formular aus und stelle die Funktionalität zum Einblenden selbiger bereit:

    window.onload = function() {  
      
      // Alle Formularelemente im 1. Formular des Dokumentes  
      var elems = document.forms[0].elements;  
      
      for (var i = 0; i < elems.length; ++i) {  
      
        // Alle Eingabefelder ausblenden  
        if (elems[i].type == "text") {  
      
          elems[i].style.display = 'none';  
      
        // Alle Checkboxen mit Einblende-Funktionalität versehen  
        } else if (elems[i].type == "checkbox") {  
      
          // Auf onchange-Event reagieren  
          elems[i].onchange = function() {  
      
            /* this: Checkbox  
               this.parentNode: Label  
               this.parentNode.parentNode: Absatz  
               this.parentNode.parentNode.getElementsByTagName('input'): Checkbox & Eingabefeld  
               this.parentNode.parentNode.getElementsByTagName('input')[1]: Eingabefeld  
             */  
            var input = this.parentNode.parentNode.getElementsByTagName('input')[1];  
      
            // Wenn Checkbox aktiviert  
            if (this.checked) {  
      
              // display-Eigenschaft zurücksetzen => Eingabefeld einblenden  
              input.style.display = '';  
            } else {  
      
              // Eingabefeld ausblenden  
              input.style.display = 'none';  
            }  
          };  
        }  
      }  
    };
    

    Steht nun JS und CSS zur Verfügung, wird ein Eingabefeld nur dann eingeblendet, wenn die jeweilige Checkbox aktiviert wird.

    PHP: Überprüfe nun in jedem Fall serverseitig die Eingaben. Nimm also den Wert für „Foo“ zum Beispiel nur dann an, wenn die jeweilige Checkbox aktiviert und in das zugehörige Eingabefeld etwas eingetragen wurde:

    <?php  
      
    if (isset($_POST)) {  
      
      print_r($_POST);  
    }  
      
    ?>
    

    Der Vorteil an diesem Aufbau: den Nutzer muss es nicht interessieren, was wie im Hintergrund vor sich geht und er wird nicht Popup-ähnlichen Nervereien belästigt.

    Einen schönen Mittwoch noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
  3. Wenn ich dich richtig verstanden habe meinst du sowas ähnliches...

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Unbenanntes Dokument</title>
    <script language="javascript" type="text/javascript">
    window.onload = function() {
     var myform = document.forms[0];
     myform.onsubmit = function() {
      myform.elements["foo"].value = prompt("Was willst haben?", "");
      return true;
     }
    }
    </script>
    </head>
    <body>
    <form action="___DEINE_PHP_DATEI___">
    <input type="hidden" name="foo" value="" />
    Check 1: <input type="checkbox" name="bar" value="Checkbox_1_klicked" /><br />
    Check 2: <input type="checkbox" name="foobar" value="Checkbox_2_klicked" /><br />
    <input type="submit" />
    </form>
    </body>
    </html>