2012-06-23 14 views
5

Mam dane wejściowe na stronie HTML, gdzie osoba będzie coś wpisać i co chcę, jest dla funkcji, aby zostać wywołana za każdym razem, gdy przestają pisać. Wiem o zdarzeniu onkeypress, ale jest ono wywoływane za każdym razem, gdy wpisywany jest znak. Oto przykład tego, co lubię:Jak mogę wywołać funkcję po tym, jak osoba przestaje pisać?

  1. rodzaje osoba „to jest test” do wejścia
  2. Po osoba przestaje pisać, funkcja foo() powinna zostać wywołana
  3. wpisze coś innego do wejście
  4. Po osoba przestaje pisać, function foo() powinna zostać wywołana
  5. Powtórz ....

Czy to możliwe?

Wielkie dzięki!

+7

Zdefiniuj „człowiek przestał pisać” ... – Oded

+2

można obsługiwać mouseUp zdarzenia utrata ostrości. Ale żadna osoba przestaje pisać –

+0

@Oded - Tak jak wpisują "to jest test", a następnie przestań naciskać klawisze na klawiaturze. Powinno być więc może drugie opóźnienie. – Nate

Odpowiedz

10

Posłuchaj instrukcji onkeyupevent. Zaczyna się limit czasu (musisz zdefiniować "stop" jako pewną ilość czasu, w przeciwnym razie będzie on wywoływany przy każdym naciśnięciu klawisza), a przy przekroczeniu limitu czasu wykonasz swoją funkcję.

Jeśli funkcja jest włączona podczas działania stopera, zatrzymaj ją.

Coś ...

var timer; 

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

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

Jak to dokładnie wygląda kod zależy gdzie i jak używasz go ... po prostu pokazać drogę, aby to zrobić.

+0

Ixx - Dzięki, to jest świetne, ale nie mogę sprawić, żeby to działało: http : //jsfiddle.net/j35ba/ – Nate

+0

daj mi sekundę, sprawdzę to – Ixx

+0

ah, nazwa funkcji jest nieprawidłowa! ponieważ wywołujące je funkcje mają te same nazwy, więc wywołują je ponownie, dopóki nie przekroczą błędów stosu. zmień nazwy funkcji. – Ixx

0

Wystarczy ustawić zegar javascript, aby uruchomić/ponownie uruchomić na onKeyPress. Następnie po prostu określ, jak długo definiuje "przestaje pisać" i uruchamia skrypt.

0

Najpierw przechwyć zdarzenie "key up" i ustaw zmienną "stoppedTyping" na wartość true. Następnie ustaw licznik czasu (jak długo chcesz czekać, zanim uznasz to za zdarzenie "zatrzymane pisanie").

Jeżeli przed zegar gaśnie, uchwycić „klucz w dół” zdarzenie, ustaw „stoppedTyping = false”

Gdy zegar idzie wygasa, twój callback timera może sprawdzić wartość „stoppedTyping”. Jeśli jest to prawda, użytkownik przestał pisać (lub dokładniej, nie wpisał żadnych nowych znaków na czas działania timera). Jeśli jest fałszywa, to nie przestali pisać - musieli wpisać co najmniej jeszcze jeden znak podczas pracy licznika czasu.

0

Jeśli dobrze rozumiem, "przestań pisać" oznacza "brak naciśnięć klawiszy przez określony czas". W tym przypadku trzeba użyć liczniki: http://jsfiddle.net/xnghR/1/

Powiązane problemy