2015-12-21 14 views
8

Mam pole tekstowe, w którym użytkownik może wprowadzać tylko dane liczbowe. Używam następującą funkcję keyup pola tekstowego:Opóźnienie zdarzenia jQuery na wejściu użytkownika

$('#ssn').keyup(function() { 
    var val = this.value.replace(/\D/g, ''); 
    this.value = val; 
}); 

Problem używam do jest lag gdy klawisze w górę na ograniczonym klucza użytkownika, wyświetlacze znakowe na chwilę przed jej zastąpić pusty ciąg. Przytrzymanie klawisza wyświetli strumień znaków w polu, dopóki klucz nie zostanie zwolniony. Czy istnieje sposób, aby temu zapobiec? Wypróbowałem różne zdarzenia na klawiaturze, takie jak keydown lub keypress, i nie zachowywały się lepiej. Oto skrzypce problemu: https://jsfiddle.net/oxpy96g9/

+0

do 'lag' jest nieuniknione jak 'keyu Zdarzenie p' nie uruchamia się, dopóki klucz nie zostanie zwolniony, a wartość zostanie dodana do pola wejściowego. –

+0

1. Spowolnienie wprowadza się za pomocą jQuery 2. Wprowadza się spowolnienie poprzez powtarzaną deklarację zmiennej 3. Wprowadza się spowolnienie przez uruchomienie maszyny JavaScript Regex 4. Twój kod działa po zwolnieniu klucza przez użytkownika, który wygląda jak spowolnienie. W sumie napisałeś bałagan. –

+3

Spróbuj słuchać zdarzenia 'input' zamiast ...' $ ('# ssn'). On ('input', function() {...}); ' –

Odpowiedz

9

Konwersja mój komentarz do odpowiedzi

Zamiast słuchać przypadku keyup, słuchać input event tak, że zdarzenie zostanie zwolniony, gdy zmiany wartości zamiast po zwolnieniu przycisku:

Updated Example

$('#numbers').on('input', function() { 
    this.value = this.value.replace(/\D/g, ''); 
}); 
+0

próbował! świetna robota! – brandelizer

+0

Oh wait. Próbowałem tego w jsfiddle, ale najwyraźniej było to opóźnione, więc nie przetworzyłem mojego kliknięcia na przycisku "uruchom" po tym, jak go zredagowałem, aby sprawdzić: D – nicael

+0

Pracowałem jak wdzięk, dziękuję. – noclist

Powiązane problemy