Marc: Script funktioniert nicht, wenn Textfeld einen Standartwert hat

Hallo,

ich habe (mkt etwas Hilfe) folgendes script gebaut:

<script language="JavaScript1.2" type="text/javascript">
<!--
var bob = "";
function func() {
wert = document.newmsg.feld.value //auslesen des Textfeldes
{if(bob!=wert)
{
bob=wert
aufruf(wert);
}}
setTimeout("func()",1000) //Funktion wieder aufrufen
}

function aufruf(wert)
{
username.reload("<?php echo $_REQUEST["PHPSESSID"] ?>", wert);
//Bei änderung Iframe neuladen
}
</script>

Dieses Script ist ein "live" datenbankabfrage. Sobald sich der inhalt des textfeldes "feld" ändert wird die funktion aufruf() aufgerufen, welche ein Iframe neu lädt. in dem iframe wiederum ist ein PHP Script, das die DB Abfrage mit den passenden Werten durchführt. Dieses Cript funktioniert auch super. nun möchte ich aber dem textfeld einen Vorgabewert geben. Sobald ich das mache klappt es nicht mehr (der IE meldet "das objekt unterstützt die eigenschaft oder Methode nicht"). Kann mir jemand das erklären? Woran liegt das und wie kann ich das ganze ändern?

Marc

  1. Hallo,

    ich habe (mkt etwas Hilfe) folgendes script gebaut:

    <script language="JavaScript1.2" type="text/javascript">
    <!--
    var bob = "";
    function func() {
    wert = document.newmsg.feld.value //auslesen des Textfeldes
    {if(bob!=wert)

    Wozu die geschweifte Klammer?

    {
    bob=wert
    aufruf(wert);
    }}
    setTimeout("func()",1000) //Funktion wieder aufrufen

    Wozu das? Es gibt onchange bzw. onblur als event für Textfelder.

    }

    function aufruf(wert)
    {
    username.reload("<?php echo $_REQUEST["PHPSESSID"] ?>", wert);

    Ich weiss zwar nicht, was username für ein Objekt ist, aber du kannst mit JS keinen PHP Code ausführen, der wird auf dem Server ausgeführt.

    //Bei änderung Iframe neuladen
    }
    </script>

    Kann es sein, dass du den onload event nicht kennst?

    So wie es aussieht

    1. Moin,

      {if(bob!=wert)

      Wozu die geschweifte Klammer?

      Muss wohl ein relikt aus vergangener zeit sein... ist entfernt...

      setTimeout("func()",1000) //Funktion wieder aufrufen

      Wozu das? Es gibt onchange bzw. onblur als event für Textfelder.

      Ja, aber diese events greifen erst, wenn ich die Änderung bestätige (also das Textfeld verlasse und etwas anderes anklicke). Mein script soll aber schon checken während die Eingabe gerade erst getippt wird...

      username.reload("<?php echo $_REQUEST["PHPSESSID"] ?>", wert);

      Ich weiss zwar nicht, was username für ein Objekt ist, aber du kannst mit JS keinen PHP Code ausführen, der wird auf dem Server ausgeführt.

      username ist der Name des IFrames. PHP Code kann ich auch ausführen weil das ganze auf nem Server läuft. Die JS Fübergibt also neben 'wert' auch die aktuelle SessionID an das IFrame, da sie dort gebraucht wird.

      Kann es sein, dass du den onload event nicht kennst?

      Doch, kenne ich! Ist im body-tag drinne um das Script zum ersten mal zu starten! Trotzdem funzt der Spass nicht wenn das Textfeld nen value="irgendwas" hat...

      Grüsse

      Marc

      1. Wozu das? Es gibt onchange bzw. onblur als event für Textfelder.

        Ja, aber diese events greifen erst, wenn ich die Änderung bestätige (also das Textfeld verlasse und etwas anderes anklicke). Mein script soll aber schon checken während die Eingabe gerade erst getippt wird...

        Was aber ein bisschen overkill ist.

        username.reload("<?php echo $_REQUEST["PHPSESSID"] ?>", wert);

        Ich weiss zwar nicht, was username für ein Objekt ist, aber du kannst mit JS keinen PHP Code ausführen, der wird auf dem Server ausgeführt.

        username ist der Name des IFrames. PHP Code kann ich auch ausführen weil das ganze auf nem Server läuft. Die JS Fübergibt also neben 'wert' auch die aktuelle SessionID an das IFrame, da sie dort gebraucht wird.

        Nein, du übergibst PHP Code an eine JS Funktion, was völlig zwecklos ist. Wo soll denn der PHP Schnipsel geparst werden, deiner Meinung nach?

        Javascript läuft im Browser und nicht auf dem server im gegensatz zu PHP.

        Kann es sein, dass du den onload event nicht kennst?

        Doch, kenne ich! Ist im body-tag drinne um das Script zum ersten mal zu starten! Trotzdem funzt der Spass nicht wenn das Textfeld nen value="irgendwas" hat...

        Doch das funzt, aber irgendein Objekt ist in dem Moment wo du darauf zugreifen möchtest nicht da. Du solltest die Seite mal im Mozilla testen, der sagt dir wenigstens genau wo der Fehler auftritt.
        Oder du versuchst mal die Fehlermldung des IE besser  zu interpretieren.

        Struppi.

        1. Was aber ein bisschen overkill ist.

          Wieso? Das Script macht ja nichts, solange ich nichts eingebe..: es läuft halt nur und wartet...

          Nein, du übergibst PHP Code an eine JS Funktion, was völlig zwecklos ist. Wo soll denn der PHP Schnipsel geparst werden, deiner Meinung nach?

          Nein, der PHPCode wird ja schon beim laden der Seite geparset. JavaScript weiss davon gar nichts. Wenn du die Seite im browser aufrufen würdest ist an dieser Stelle schon gar kein Code mehr, sondern die SessionID. Also der Aufruf sieht dann schon so aus:

          username.reload("32f52f7d6287f338f23", wert);

          Javascript läuft im Browser und nicht auf dem server im gegensatz zu PHP.

          japp und bevor die Seite zum browser kommt läuft erst PHP auf dem Server

          Doch das funzt, aber irgendein Objekt ist in dem Moment wo du darauf zugreifen möchtest nicht da. Du solltest die Seite mal im Mozilla testen, der sagt dir wenigstens genau wo der Fehler auftritt.
          Oder du versuchst mal die Fehlermldung des IE besser  zu interpretieren.

          Mozilla ist bei mir schlecht, der verträgt sich mit meinem System nicht. Um genau zu sein verträgt er sich mit dem netscape nicht, den ich nutze...

          Laut IE liegt der Fehler in dieser zeile:

          username.reload("6eb6ab83a707f95f0b4702b65ca2c0ad", wert);

          Also der Aufruf der Funktion in dem IFrame. Aber daran hat sich überhaupt nichts geändert... Ich geb dir hier nochmal die restlichen Daten:

          Das eingabeFeld:
          <input name="feld" type="text" id="feld" size="4" maxlength="4"  style='font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 11px; background-color: #D8D8D8; border: thin groove; font-weight: lighter;' value="2">

          Das IFrame:
          <iframe name="username" align="middle" frameborder="0" height="15" width="300" scrolling="no" src="comm/user_db.php?PHPSESSID=6eb6ab83a707f95f0b4702b65ca2c0ad&uid="></iframe>

          Und der inhalt des IFrames:
          geparst:
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Userdb</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><script language="JavaScript1.2" type="text/javascript">
          function reload(sess, uid){
          location.href="comm/user_db.php?PHPSESSID=" + sess + "&uid=" + uid;
          }
          </script></head><body bgcolor="#FFFFFF" text="#335CAE" leftmargin="0" topmargin="0"><font color='red'>User existiert nicht!</font></body></html>

          Brauchst du sonst noch etwas?

          Grüsse

          Marc

          1. Was aber ein bisschen overkill ist.

            Wieso? Das Script macht ja nichts, solange ich nichts eingebe..: es läuft halt nur und wartet...

            Doch sobald ich was eintippe wird das iframe reloaded einmal pro sekunde und es gibt Leute die tippen wesentlich langsamer.

            Nein, du übergibst PHP Code an eine JS Funktion, was völlig zwecklos ist. Wo soll denn der PHP Schnipsel geparst werden, deiner Meinung nach?

            Nein, der PHPCode wird ja schon beim laden der Seite geparset. JavaScript weiss davon gar nichts. Wenn du die Seite im browser aufrufen würdest ist an dieser Stelle schon gar kein Code mehr, sondern die SessionID. Also der Aufruf sieht dann schon so aus:

            username.reload("32f52f7d6287f338f23", wert);

            Schön, aber bis jetzt sah es für mich so aus als ob wir über JS reden. OK, aber selbst das ist sinnfrei, da es nur einen Parameter für window.location.reload() gibt siehe selfHTML http://selfhtml.teamone.de/javascript/objekte/location.htm#reload

            Javascript läuft im Browser und nicht auf dem server im gegensatz zu PHP.

            japp und bevor die Seite zum browser kommt läuft erst PHP auf dem Server

            Also zeigst du mir nicht den code, der ausgeführt wird sondern irgendein MischMasch aus PHP/JS ohne das ich erkennen kann was was ist.

            Doch das funzt, aber irgendein Objekt ist in dem Moment wo du darauf zugreifen möchtest nicht da. Du solltest die Seite mal im Mozilla testen, der sagt dir wenigstens genau wo der Fehler auftritt.
            Oder du versuchst mal die Fehlermldung des IE besser  zu interpretieren.

            Mozilla ist bei mir schlecht, der verträgt sich mit meinem System nicht. Um genau zu sein verträgt er sich mit dem netscape nicht, den ich nutze...

            ??? Scheint mir komisch, da damit eher der IE probleme hat, mehrere Versionen zu installieren. Netscape zeigt übrigens auch sehr gut die JS Fehler, aber das nützt in deinem Falll ja nicht, da er keine iFrames kennt.

            Laut IE liegt der Fehler in dieser zeile:

            username.reload("6eb6ab83a707f95f0b4702b65ca2c0ad", wert);

            Weisste! du wirfst uns hier häppchen vor und nach und nach kommen Details zum Voschein die absolut notwendig wären und wir die obige Diskussion komplett hätten sparen können.

            reload was ist das deiner Meinung nach?
            Meiner nach, ist das eine Funktion des loaction Objektes mit dem man ein window reloaden kann, es hat keine Parameter.

            Aber was ist es bei dir?

            function reload(sess, uid){
            location.href="comm/user_db.php?PHPSESSID=" + sess + "&uid=" + uid;
            }

            Woher sollen wir das Wissen?

            Aber, was für eine Location willst du hier reloaden?

            Evtl. meinst du 'self' oder 'window'. Aber wieso soll diese Funktion zu Verfügung stehen, wenn du die anderen Funktionen aufrufst? Du lädts doch dieses Frame ständig neu und das kann dauern, 1 sekunde 2 oder sogar eine Minute, je nachdem wie langsam oder schnell dein Server ist.

            Du musst warten, bis das iFrame geladen ist, oder bessser du tust diese Funktion in die Hauptdatei und rufst sie dann von dort auf.

            An deinem Konzept ist einiges Faul, wenn du das für's Internet einsetzen willst.

            Struppi.

            1. Doch sobald ich was eintippe wird das iframe reloaded einmal pro sekunde und es gibt Leute die tippen wesentlich langsamer.

              Das ist ja variabel... Das kann ich noch anpassen.

              Also zeigst du mir nicht den code, der ausgeführt wird sondern irgendein MischMasch aus PHP/JS ohne das ich erkennen kann was was ist.

              nein, ich zeige dir einen code der ausgeführt wird mit EINEM Parameter, der dynamisch von PHP eingesetzt wird. mehr nicht...

              ??? Scheint mir komisch, da damit eher der IE probleme hat, mehrere Versionen zu installieren. Netscape zeigt übrigens auch sehr gut die JS Fehler, aber das nützt in deinem Falll ja nicht, da er keine iFrames kennt.

              NS 6 aufwärts schon...

              Weisste! du wirfst uns hier häppchen vor und nach und nach kommen Details zum Voschein die absolut notwendig wären und wir die obige Diskussion komplett hätten sparen können.

              reload was ist das deiner Meinung nach?
              Meiner nach, ist das eine Funktion des loaction Objektes mit dem man ein window reloaden kann, es hat keine Parameter.

              Ok, kann sein das ich da eine Funktion erwischt habe, die schon existiert. Mein fehler...

              Aber was ist es bei dir?

              function reload(sess, uid){
              location.href="comm/user_db.php?PHPSESSID=" + sess + "&uid=" + uid;
              }

              Woher sollen wir das Wissen?

              Ok, das hätte ich anders machen können tut mir leid...

              Aber, was für eine Location willst du hier reloaden?

              Eben nicht, sondern self mit geänderten Parametern hinter dem ?

              Du musst warten, bis das iFrame geladen ist, oder bessser du tust diese Funktion in die Hauptdatei und rufst sie dann von dort auf.

              Ok, das kann ich machen. Wenn du mir sagst wie ich aus der Hauptseite heraus eine Seite im ändere (andere parameter hinter dem ?, nämlich die, die gerade eingegeben wurden...)

              An deinem Konzept ist einiges Faul, wenn du das für's Internet einsetzen willst.

              kann sein, deswegen frage ich ja hier :)

              Grüsse

              Marc (der jetzt erst mal weg muss)

  2. OK, ich hab dir mal grob was gebaut:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <HTML>
    <HEAD>

    <STYLE TYPE="text/css">
    #feld
    {

    font-family: Verdana, Helvetica, Arial, sans-serif;
       font-size: 11px;
       background-color: #D8D8D8;
       border: thin groove;
       font-weight: lighter;
    }

    </STYLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
    var bob = "";
    var sess = '12345'; // <-- das muss per PHP da reingeschrieben werden.

    function func(wert)
    {
        if(bob != wert)
        {
            bob=wert;
            var url = "comm/user_db.php?PHPSESSID=" + sess + "&uid=" + wert;
            //alert(url);
            window.username.location.href = url;
        }
    }
    //-->
    </SCRIPT>
    </HEAD>
    <BODY>
    <form>
    <input name="feld" type="text" id="feld" size="4" maxlength="4"  value="2" onkeyup="func(this.value);">
    <form>
    </form>
    <iframe name="username" align="middle" frameborder="0" height="15" width="300" scrolling="no" src="about:blank"></iframe>
    </BODY>
    </HTML>

    Außerdem sollltest du deinen Funktionen aussagekräftigere Namen geben.  'func()' ist nichstsagen, genauso wie für die Feldnamen 'feld' nicht besonders gelungen ist.

    Struppi.