Nach drei Chars ein Timeout

dg87

Erfahrenes Mitglied
Hallo zusammen,

ich lerne gerade JS. Ich möchte gerne folgendes realisieren:
Ein Benutzer gibt in ein Feld etwas ein. Nach drei Chars soll ein Timeout gestartet werden. Bei sagen wir mal 1,5 Sekunden soll dann mittels DWR (Ajax und Java) ein Query ein abgeschickt werden.

Meine Fragen:
- Wie mache ich das, dass nach drei Chars ein Timeout gemacht wird?
- Ich kapier noch nicht ganz, wie JS meine Java Bean aufrufen soll, vll hat da jemand einen Tipp, wobei die erste Frage für mich als "****" interessanter wäre..


Vielen Dank
 
HTML:
<script language="javascript" type="text/javascript">
function textlaenge (text) {
if ((text.length % 3) == 0) {
	alert ("durch 3 teilbar.");
	// Sonstiger Code der immer dann ausgeführt
	// wird wenn der Text "3-stellig" ist.
}
}
</script>

<input type="text" name="box" value="" size="20" onkeyup="textlaenge(this.value);" />

Hier wird dir nach dem Loslassen einer Taste immer die Länge des im Textfeld enthaltenen Textes ausgegeben.
 
Zuletzt bearbeitet:
Ah Okey, dann mach ich quasi ne Prüfung rein, wenn drei Chars getippt wurden, dass dann das Script die Arbeiten macht?

edit:
Die Prüfung auf die drei Chars hin ist nun kein Problem. Jetzt müsste man erstmal noch einen Timeout einbauen. Schließlich soll der nicht ab drei chars gleich querys verschicken, sondern erstmal Warten und Prüfen, ob der User noch eingaben gibt, wenn nicht dann losschicken..
 
Zuletzt bearbeitet:
Habe das Beispiel nochmal so geändert das immer bei einer Textlänge von 3, 6, 9, ... Zeichen eine Meldung ausgegben wird.

Die "Arbeit" die dann gemacht wird musst du in die IF-Anweisung reinschreiben
 
hmm ich krieg das nicht hin.
Hab jetzt folgendes beim Aufruf der Textarea eingefügt:
onkeyup="this.setTimeout(goupsByUserInput(this.value),2000)

Er soll quasi nach jeder Eingabe zwei Sekunden warten und dann erst die Function aufrufen...
 
Du willst nach jeder Eingabe eine Pause von 2 Sekunden machen? Na dann viel Spaß beim Schreiben.

HTML:
<script language="javascript" type="text/javascript">
function pause () {
	document.getElementById("box").disabled = true;
	aktiv = window.setTimeout("weiter()", 2000);
}

function weiter() {
	window.clearTimeout(aktiv);
	document.getElementById("box").disabled = false;
	document.getElementById("box").focus();
}
</script>

<input type="text" name="box" id="box" value="" size="20" onkeyup="pause();" />

Wenn du hier etwas eingibst, wird das Textfeld für 2 Sekunden "gesperrt". Erst nach dieser Pause kann wieder ein Zeichen eingegeben werden. Einfügen per STRG + V ist aber auch mit längerem Text möglich!
 
Nein, ich möchte dass - und deshalb frag ich ja um hilfe - dass er nicht direkt nach der dritten Zeicheneingabe den Query losschickt, sondern wenn er kurz dazwischen das schreiben aufhört. So wie man es halt kennt zB von Facebook, man gibt was ein und er bringt dann vorschläge nach X Millisekunden.
Dazu brauch ich also nen timer, ich will ned direkt vorschlagen, sondern wenn er kurz das tippen aufhört...
 
Ich würds wahrscheinlich mit jquery und dem Timer-Addon lösen
http://code.google.com/p/jquery-timer/

Javascript:
<script type="text/javascript">
        //TODO jquery und timer einbinden


        $(function(){
                //Timer erstellen
                var timer = $.timer(function() {
                        alert('//TODO: ajax Zeugs');
                });
                //Timer definieren
                timer.set({ time : 2, autostart : false });

                //Change-Event setzen
                $('#myField').change(function(){
                        //timer neu starten
                        timer.play(true);
                });
        });
</script>

<input id="myField" type="text" />
 
Zurück