2012-06-23 10 views
5

Ho un input su una pagina HTML in cui una persona digiterà qualcosa e quello che voglio è che una funzione venga chiamata ogni volta che smette di digitare. Conosco l'evento onkeypress, ma questo viene chiamato ogni volta che un carattere viene digitato. Ecco un esempio di quello che vorrei:Come posso chiamare una funzione dopo che una persona smette di digitare?

  1. tipi Persona "questa è una prova" in ingresso
  2. Dopo che la persona smette di battitura, la funzione foo() dovrebbe essere chiamato
  3. tipi Person qualcos'altro in l'ingresso
  4. Dopo che la persona smette di battitura, la funzione foo() dovrebbe essere chiamato
  5. Ripetere ....

è possibile?

Grazie mille!

+7

Definire "la persona ha smesso di digitare" ... – Oded

+2

è possibile gestire il mouse sull'evento di perdita di messa a fuoco. Ma non la persona smettere di digitare –

+0

@Oded - Come in loro digitano "questo è un test", quindi smettere di premere i tasti sulla tastiera. Quindi ci dovrebbe essere forse un secondo ritardo. – Nate

risposta

10

Ascolta a onkeyupevent. Lì si avvia un timeout (devi definire "stop" come una quantità di tempo, altrimenti verrà chiamato ad ogni keyup), e nel timeout eseguire la tua funzione.

Se onkeydown viene chiamato mentre il timer è in esecuzione, interromperlo.

Qualcosa di simile ...

var timer; 

function onKeyUpHandler(e){ 
    timer = setTimeout("foo()", 500)  
} 

function onKeyDownHandler(e) { 
    clearTimeout(timer); 
} 

Come questo codice è esattamente dipende da dove e come lo si utilizza ... solo per mostrare il modo per farlo.

+0

Ixx - Grazie, questo è fantastico, ma non riesco a farlo funzionare: http : //jsfiddle.net/j35ba/ – Nate

+0

dammi un secondo, lo controllerò – Ixx

+0

ah, il nome delle funzioni è sbagliato! perché le funzioni che chiamano questi hanno lo stesso nome, quindi chiamano nuovamente themseves fino a quando non ottieni l'errore di stack superato. cambia i nomi delle funzioni. – Ixx

0

Basta impostare un timer javascript per avviare/riavviare onKeyPress. Quindi basta definire per quanto tempo definisce "smette di digitare" ed esegui il tuo script.

0

Innanzitutto, acquisire l'evento "key up" e impostare una variabile "stoppedTyping" su true. Quindi impostare un timer (per quanto tempo si desidera attendere prima di considerare questo un evento "interruzione della digitazione").

Se, prima che il timer si spegne, si acquisisce una "chiave di basso" evento, impostare "stoppedTyping = false"

Quando il timer si scade, il callback timer può controllare il valore di "stoppedTyping". Se è vero, l'utente ha smesso di digitare (o, più precisamente, non ha digitato nessun nuovo carattere per la durata del timer). Se è falso, non hanno smesso di digitare: devono aver digitato almeno un altro carattere mentre il timer è in esecuzione.

0

Se ho capito bene, "smetti di digitare" significa "nessuna sequenza di tasti per un certo periodo di tempo". In questo caso, è necessario utilizzare i timer: http://jsfiddle.net/xnghR/1/

Problemi correlati