ebi: PHP und input Textfeld + onChange

Ich möchte dass eine bestimmte Funktion aufgerufen wird, sobald der User die Zahl in einem InputFeld verändert (von mir aus auch ENTER drückt).

Ich bekomme es selber nicht hin,
BITTE UM HILFE!

  1. Hallo ebi,  <- </faq/#Q-05a>

    Ich möchte dass eine bestimmte Funktion aufgerufen wird, sobald der User die Zahl in einem InputFeld verändert (von mir aus auch ENTER drückt).

    schauen wir und doch mal deinen Titel an:

    PHP

    ok, was php mit deinem Problem zu tun hat weiß ich nicht (oder meinst du eine php-Funktion?)

    und input

    <input>

    Textfeld

    type="text" (das ist nicht unbedingt nötig, da Standardwert)

    • onChange

    onchange=""

    ergibt:
    <input type="text" onchange="alert('gaendert')">
    statt dem alert() kannst du natürlich auch eine Funktion aufrufen - wo liegt da jetzt das Problem?

    Ich bekomme es selber nicht hin,

    was hast du bisher versucht?

    BITTE UM HILFE!

    das ist noch lange kein Grund hier rumzuschreien.

    Grüße aus Nürnberg  <- </faq/#Q-05c>
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. es funktioniert einfach nicht eine PHP Funktion aufzurufen!

      --------PHP------
      function anzahlgeaendert($anzahl, $produkt)
      {
      [irgendwas....]
      }
      <form>
      <input class=anzahl onChange=anzahlgeaendert(this.value, &pid) name=anzahl type=select size=1 maxlength=3 value=$anzahl>
      </form>

      WARUM ZUM TEUFEL FUNZT DAS NICHT????

      1. Hallo ebi,

        es funktioniert einfach nicht eine PHP Funktion aufzurufen!

        Du machst hier zwei Dinge falsch:

        1. Du gehst davon aus, dass onchange etwas mit PHP zu tun hat. Dem ist nicht so. onchange ist ein JavaScript-Eventhandler.

        2. Du gehst davon aus, dass Du mit onchange eine PHP-Funktion aufrufen kannst. PHP läuft auf dem Server. JavaScript auf dem Client. Du kannst mit JavaScript keine PHP-Funktion _direkt_ aufrufen. Du kannst mit JavaScript dem Browser höchstens mitteilen, dass er eine PHP-Seite aufrufen soll, die dann wiederrum eine Aktion durchführt.

        <input class=anzahl onChange=anzahlgeaendert(this.value, &pid) name=anzahl type=select size=1 maxlength=3 value=$anzahl>

        Dir sollte klar sein, dass Du Anführungszeichen um *alle* Attributwerte setzen musst, die nicht ausschließlich aus Ziffern und Buchstaben bestehen. Besserer Stil wäre es, um *alle* Attributwerte Anführungszeichen zu setzen.

        WARUM ZUM TEUFEL FUNZT DAS NICHT????

        Du brauchst nicht zu schreien.

        Viele Grüße,
        Christian

        1. Mit den " " " Zeichen um die Eigenschaften funktioniet nicht, weil dann PHP denkt, dass der ECHO ""; Befehl geschlossen wird, also muss man die weglassen.

          Dann sage mit bitte wie ich die gleiche PHP seite mit folgenden GET Atributen aufrufen kann!
          $SELF_PHP?anzahl= ...value... &pid=$pid  ?????

          OHNE AUF EINEN BUTTON ZU DRÜCKEN...

          1. Hallo ebi,

            Mit den " " " Zeichen um die Eigenschaften funktioniet nicht, weil dann PHP denkt, dass der ECHO ""; Befehl geschlossen wird, also muss man die weglassen.

            Nein, die muss man nicht weglassen, sondern maskieren.

            echo "<input type="text"...>";

            Alternativ:

            echo '<inpt type="text" ...>';

            Allerdings kannst Du bei letzterer Variante keine Variablen mit rein nemhen, daher müsstest Du folgendes machen:

            echo '<input type="text" name="'.$variable.'">';

            Dann sage mit bitte wie ich die gleiche PHP seite mit folgenden GET Atributen aufrufen kann!
            $SELF_PHP?anzahl= ...value... &pid=$pid  ?????

            Du könntest es direkt bei onchange / onkeypress machen:

            echo '<input ... onchange="location.href = ''.$_SERVER['PHP_SELF'].'?anzahl='+escape(this.value)+'&pid='.urlencode($pid).'';">';

            Allerdings wird in dem Fall dann bei jeder Änderung eine neue Seite aufgerufen. Halte ich bestenfalls für unschön.

            Viele Grüße,
            Christian

            1. echo '<input ... onchange="location.href = ''.$_SERVER['PHP_SELF'].'?anzahl='+escape(this.value)+'&pid='.urlencode($pid).'';">';

              ich kenne den Befehl "escape" und "urlencode" nicht.

              1. echo '<input ... onchange="location.href = ''.$_SERVER['PHP_SELF'].'?anzahl='+escape(this.value)+'&pid='.urlencode($pid).'';">';

                Wie würde der Befehl denn aussehen, wenn ich den in ein

                echo "";

                einbinden würde? Möchte meinen echo Befehl nicht unterbrechen, der übersichtlichkeit wegen. Müsste doch auch anders gehen, oder?

                DANKE FÜR ALLES SChON MAL IM VORAUS...!!!

                1. Hallo ebi,

                  echo '<input ... onchange="location.href = ''.$_SERVER['PHP_SELF'].'?anzahl='+escape(this.value)+'&pid='.urlencode($pid).'';">';
                  Wie würde der Befehl denn aussehen, wenn ich den in ein

                  echo "";

                  einbinden würde?

                  echo "<input ... onchange="location.href = '".$_SERVER['PHP_SELF']."?anzahl='+escape(this.value)+'&pid=".urlencode($pid)."';">";

                  oder

                  echo "<input ... onchange="location.href = '{$_SERVER['PHP_SELF']}?anzahl='+escape(this.value)+'&pid=".urlencode($pid)."';">";

                  Möchte meinen echo Befehl nicht unterbrechen, der übersichtlichkeit wegen.

                  Wenn Du auf das urlencode verzichten kannst, weil Du z.B. genau weißt, dass in $pid nur Zahlen und Buchstaben stehen, dann kannst Du auch folgendes machen:

                  echo "<input ... onchange="location.href = '{$_SERVER['PHP_SELF']}?anzahl='+escape(this.value)+'&pid=$pid';">";

                  Viele Grüße,
                  Christian

              2. Hallo ebi,

                ich kenne den Befehl "escape"

                escape ist eine JavaScript-Funktion, die einen Wert für eine URL richtig kodiert. (also bestimmte "verbotene" Zeichen durch %XX ersetzt, XX sei hier eine hexadezimale Zahl) Stell Dir mal vor, der Wert hätte als Inhalt 123&a=b. Dann würde das ja ohne escape() zur Folge haben, dass für anzahl der Wert 123 übergeben würde und dann zusätzlich ein Parameter a mit dem Wert b. Wenn Du dagegen escape() drüber laufen lässt, dann kommt 123%26a%3Db heraus. PHP dekodiert solche Werte automatisch.

                und "urlencode" nicht.

                urlencode ist eine PHP-Funktion, die das gleiche tut.

                Viele Grüße,
                Christian

  2. Hallo ebi,

    Ich möchte dass eine bestimmte Funktion aufgerufen wird, sobald der User die Zahl in einem InputFeld verändert (von mir aus auch ENTER drückt).

    Ich verstehe Dein Problem nicht ganz:

    <input type="text" onchange="funktion();">

    Dann wird beim Ändern die Funktion 'funktion' aufgerufen. Allerdings passiert das in den meisten Browsern erst, wenn das Textfeld wieder verlassen wird. Eventuell hilft Dir auch onkeypress weiter? (http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onkeypress) Das funktioniert im Gegensatz zu onchange meines Wissens allerdings nicht beim Einfügen aus der Zwischenablage.

    Viele Grüße,
    Christian

    PS: Das hat nichts mit PHP zu tun.