dichti: setTimeout / clearTimeout

Hallo zusammen,

Ich bin auf ein kleineres Problem gestossen als ich per onkeyup="" meine Datenbank durchsuchen wollte.
Und zwar hab ich folgendes Problem:

Ich hab ein Input <input id="search" onkeyup="search_db()">. Nun soll der mir bei jedem Tastendruck diese Funktion ausführen, aber sie wieder abbrechen wenn ein neuer Tastendruck geschehen ist bevor das setTimeout abgelaufen ist. Wenn ich das so mache wie unten, dann macht der mir mit jedem Tastendruck ne Abfrage, aber einfach mit einer Zeitverschiebung von 3000 Milisekunden. Das ist irgerndwie hässlich.. argh...

function search_db(){
    setTimeout("search_db1()", 3000)
}

Einer einen guten Einfall oder ne Hilfe, wäre euch sehr dankbar.

Gruss
Dichti

  1. Einer einen guten Einfall oder ne Hilfe, wäre euch sehr dankbar.

    wie wär's mit clearTimeout()?

    Struppi.

    1. Einer einen guten Einfall oder ne Hilfe, wäre euch sehr dankbar.

      wie wär's mit clearTimeout()?

      Struppi.

      Das hab ich mir auch schon überlegt, aber wie stell ich das dann an?

      function search_db(){
          clearTimeout();
          setTimeout("search_db1()", 3000);
      }

      mir kommt nur sowas in den Sinn, sonst hät ich keinen Einfall, aber diese Lösung tut genau gar nichts....
      Einen Ansatz?

      Danke

      1. Das hab ich mir auch schon überlegt, aber wie stell ich das dann an?

        http://de.selfhtml.org/javascript/objekte/window.htm#clear_timeout

        Struppi.

        1. Das hab ich mir auch schon überlegt, aber wie stell ich das dann an?

          http://de.selfhtml.org/javascript/objekte/window.htm#clear_timeout

          Struppi.

          Das ist alles schön und gut was da im Artikel steht, welchen ich bereits gelesen habe, doch das hilft mir nicht wirklich weiter, da mein setTimeout nicht durch ein Klick gestoppt wird.

          Mein Ansatz war:

            
          <html>  
          <head>  
          <script type="text/javascript">  
          function search_go(){  
              aktiv = setTimeout("search_go1()", 3000);  
          }  
          function search_go1(){  
              ...  
          }  
          function search_stop(){  
              clearTimeout(aktiv);  
          }  
          </script>  
          </head>  
            
          <body>  
            
          <input id="search" onkeyup="search_stop(), search_go()">  
            
          </body>  
          </html>  
          
          

          Dann gibt mir FireBug aber den Fehler "aktiv is not defined" aus.
          Ich bin nicht sehr vertraut mit javascript, also mir fehlt einfach der Funke wie ich das lösen könnte.

          Dichti

          1. Struppi.

            Bitte zitiere nur das auf was sich deine Antwort bezieht, keine fullquotes

            Das ist alles schön und gut was da im Artikel steht, welchen ich bereits gelesen habe, doch das hilft mir nicht wirklich weiter, da mein setTimeout nicht durch ein Klick gestoppt wird.

            sondern?

            function search_stop(){
                clearTimeout(aktiv);

            wieso prüfst du nicht ob aktiv überhaupt einen Wert hat?

            if(aktiv) clearTimeout(aktiv);

            und du musst natürlich aktiv noch mit var deklarieren.

            Struppi.

            1. wieso prüfst du nicht ob aktiv überhaupt einen Wert hat?

              if(aktiv) clearTimeout(aktiv);

              und du musst natürlich aktiv noch mit var deklarieren.

              habe ich nun beides gemacht und dann kann ich das ganze ja einfach in eine function packen, das würde dann so aussehen für mich (klappt übrigens nicht, der macht immer noch für jeden tastendruck eine abfrage):

                
              function search_go(){  
                  if(aktiv) clearTimeout(aktiv);  
                  var aktiv = setTimeout("search_go1()", 3000);  
              }  
              
              
              1. Hi,

                habe ich nun beides gemacht und dann kann ich das ganze ja einfach in eine function packen, das würde dann so aussehen für mich (klappt übrigens nicht, der macht immer noch für jeden tastendruck eine abfrage):

                function search_go(){
                    if(aktiv) clearTimeout(aktiv);
                    var aktiv = setTimeout("search_go1()", 3000);
                }

                  
                Nee, da ist var fuer dein Vorhaben natuerlich fehl am Platze.  
                  
                <http://de.selfhtml.org/javascript/sprache/variablen.htm#definieren>  
                  
                MfG ChrisB