2009-09-04 15 views
23

Hi Wieder Masters Of The Web :) Jetzt habe ich eine neue dumme Frage, und ich bitte um Verzeihung. Ich habe überall über diese Lösung gelesen, aber nicht die gefunden, die für mich funktioniert.OnKeyUp JavaScript Zeitverzögerung?

ich habe:

<input name="domain" type="text" id="domain" onKeyUp="javascript:chk_me();"> 

Alles, was ich bin zu fragen, wie dies nicht zu machen um zu überprüfen, nachdem eine Taste gedrückt wird, aber nach 1000 miliseconds der Tastatur Inaktivität zu sagen?

Antwort

34

Try this:

var timer; 
function chk_me(){ 
    clearTimeout(timer); 
    timer=setTimeout(function validate(){...},1000); 
} 

Auf diese Weise jedes Mal, wenn eine Taste gedrückt wird, wird das Timeout gelöscht und das Set wieder.

+2

Ich denke, 'var timer' muss außerhalb der Funktion Körper sein – Rodrigo

+0

Sie haben Recht der Timer muss außerhalb der Funktion eingestellt werden, ich habe die Antwort editieren – mck89

+0

Danke! Beste Antwort des Loses um eine faire Marge. – Shog9

-2

setTimeOut() wäre das eine;)

<input name="domain" type="text" id="domain" onKeyUp="setTimeout('chk_me()',1000);"> 

link text

+0

Dies wird den Wert des 'this' Kontextvariable nicht beibehalten, wenn' chk_me Aufruf() '. Auch die Verwendung der Variation von 'setTimeout()', die eine Zeichenfolge mit Code übernimmt und auswertet, ist in diesem Szenario sinnlos und in allen Szenarien unordentlich. – Shog9

+0

Hallo Berzemus, danke für deine Antwort. Ich habe alles bereit versucht dies. Es funktioniert, aber das Problem ist, dass es die Skriptausführung selbst nicht verzögert. Es verzögert sich nach jedem einzelnen Tastendruck ... – Spoonk

16

Ein anderer Ansatz, ohne Globals:

var typewatch = function(){ 
    var timer = 0; 
    return function(callback, ms){ 
     clearTimeout (timer); 
     timer = setTimeout(callback, ms); 
    } 
}(); 

Verbrauch:

die Veranstaltung durch JavaScript Anbringen:

window.onload = function() { 
    document.getElementById('domain').onkeyup = function() { 
     typewatch(function(){alert('Time elapsed!');}, 1000); 
    }; 
}; 

Oder ein Inline-Event-Handler (nicht so empfohlen viel) wie in Ihrem Beispiel:

<input type="text" name="domain" id="domain" 
    onKeyUp="typewatch(function(){alert('Time elapsed!');}, 1000);"/> 

Versuchen Sie eine Demo here.

+1

Was lässt Sie denken, dass typewatch nicht global ist? –

+1

yes typewatch ist global, aber ich meine, dass die Variable ** timer ** nicht im globalen Gültigkeitsbereich liegt und nur von der typewatch-Funktion aufgerufen werden kann. – CMS

0

Wirklich nützliche Post!

Ein weiterer Ansatz ohne Globals, mit der Funktion Eigenschaften:

function chk_me(){ 
    if(typeof timer !== undefined){ 
    clearTimeout(this.timer); 
    } 
    this.timer=setTimeout(function validate(){validate(...)},1000); 
} 
Verwandte Themen