2013-03-03 15 views
8

Łapię wklejać wydarzenia z $('selector').on('input', function(event) { ... });jQuery używając event.preventDefault() z wejściem na („”)

Potem staram się sprawdzić, co zostało wklejone, a jeśli to nie przechodzi walidacji, anuluj wklej z event.preventDefault(). Niestety, do czasu wykonania funkcji detektora tekst został już wklejony, a event.preventDefault() nic nie robi.

Jaki jest dobry sposób przechwytywania zdarzeń wklejania, a jeśli to, co zostało wklejone, nie jest sprawdzane, cofnij/zablokuj wklejanie?

Wiem, że mogę użyć .on('paste', function(event) { ... }), ale to nie daje mi tekstu, który został wklejony lub zawartość elementu wejściowego po wklejeniu, chyba że używam setTimeout() z pewnym minutowym czasem oczekiwania, a ja chciałbym unikaj używania setTimeout().

+0

Czy można utworzyć przykład jsFiddle? – j08691

+0

'event.preventDefault()' zapobiega domyślnej akcji, a po powiązaniu ze zdarzeniem 'input', tak naprawdę nie uniemożliwia wpisywania lub wklejania niczego w danych wejściowych? Podczas buforowania wartości z wklejonej treści, musisz odroczyć ją, aby uzyskać wartość, ale nie "na minutę", ustaw limit czasu na zero, a powinna nadal działać. – adeneo

+0

Domyślam się, że można ustawić limit czasu na "100ms'", aby uchwycić wartość wejścia podczas wklejania i sprawdzania poprawności zamiast "minuty". – SRy

Odpowiedz

-1

Rozumiem z tego pytania, że ​​nie wolno dopuścić do wklejenia żadnych danych w polu tekstowym do momentu, gdy nie zostanie ono zatwierdzone. Zamiast używać event.preventDefault(), możemy przechwycić wartość, gdy użytkownik wprowadzi dowolną treść, używając detektora on('input') i zweryfikować go pod kątem określonego warunku, a jeśli walidacja się nie powiedzie, opróżnij wartość pola tekstowego.

(Jest to obejście jeśli wciąż musimy użyć słuchacza on('input') zdarzeń)

kod próbki (używam console.log() do drukowania wklejony wartości):

HTML:

<input type='text' id="selector" /> 

JS:

$(document).ready(function() { 
$('#selector').on('input', function (e){ 
     if(e.target.value !== "myValue"){ 
     $('#selector').val(''); 
    } 
    else{ 
     console.log(e.target.value); 
    } 
}); 
}); 
0

Spróbuj użyć .change zdarzenia jquery.

Ustaw wartość pustą, jeśli wartość nie spełnia Twojego warunku.

Powiązane problemy