Szukam sposobu na oczyszczenie danych wejściowych wklejonych do przeglądarki, czy jest to możliwe w przypadku jQuery?
Jak dotąd udało mi się to wymyślić:
$(this).live(pasteEventName, function(e) {
// this is where i would like to sanitize my input
return false;
}
Niestety mój rozwój został wstrzymany z powodu tego „drobnego” problemu. Naprawdę uczyniłbym mnie szczęśliwym obozowiczem, gdyby ktoś mógł skierować mnie w dobrym kierunku.
Odpowiedzi:
OK, wpadłem na ten sam problem. Przeszedłem długą drogę
Wystarczy mały limit czasu, aż funkcja .val () func może zostać zapełniona.
MI.
źródło
Możesz pobrać wartość bezpośrednio z wydarzenia . To trochę tępe, jak się do tego dostać.
Zwróć false, jeśli nie chcesz, aby to przeszło.
źródło
e.clipboardData.getData('text')
w zwykłym JavaScript.W celu zapewnienia zgodności między platformami powinien on obsługiwać zdarzenia wejściowe i zmiany typu:
źródło
Naprawiłem go, używając następującego kodu:
Teraz muszę tylko zapisać położenie karetki i dołączyć do tej pozycji, a potem wszystko gotowe ... Myślę, że :)
źródło
.find(':focus')
, a wiedza o tym elemencie określa lokalizację karetki. Zobacz to .input
robi różnicę :) Zwykle mam to w moich zdarzeniach w polu tekstowym,keyup keydown paste input
ale oczywiście zależy od twoich motywówHmm ... Myślę , że możesz użyć,
e.clipboardData
aby złapać wklejane dane. Jeśli się nie uda, spójrz tutaj .źródło
Nasłuchuj zdarzenia wklejania i ustaw detektor zdarzenia keyup. Podczas tworzenia klucza przechwyć wartość i usuń moduł nasłuchiwania zdarzeń klucza.
źródło
Będzie dobrze działać.
źródło
Zbliża się to do tego, czego możesz chcieć.
Pamiętaj, że gdy obiekt clipboardData nie zostanie znaleziony (w przeglądarkach innych niż IE), obecnie otrzymujesz pełną wartość elementu + wartość ze schowka.
Prawdopodobnie możesz wykonać dodatkowe kroki, aby różnicować te dwie wartości, przed wejściem i po danych wejściowych, jeśli naprawdę dopiero po tym, jakie dane zostały naprawdę wklejone do elementu.
źródło
To zadziała dla zdarzenia wklejania myszy.
źródło
Co powiesz na porównanie oryginalnej wartości pola ze zmienioną wartością pola i odjęcie różnicy jako wklejonej wartości? Spowoduje to prawidłowe wychwycenie wklejonego tekstu, nawet jeśli w polu istnieje tekst.
http://jsfiddle.net/6b7sK/
źródło
Ten kod działa dla mnie albo wklej prawym przyciskiem myszy, albo wklej bezpośrednio kopiuj
Po wklejeniu
Section 1: Labour Cost
staje się1
w polu tekstowym.Aby zezwolić tylko na wartość zmiennoprzecinkową, używam tego kodu
źródło
Dalej:
źródło
Zobacz ten przykład: http://www.p2e.dk/diverse/detectPaste.htm
Zasadniczo śledzi każdą zmianę za pomocą zdarzenia oninput, a następnie sprawdza, czy jest to porównanie przez wklejenie. Aha, a w IE jest zdarzenie wklejania. Więc:
źródło
Ta metoda wykorzystuje zawartość jqueries content (). Uncrap ().
Po określonym limicie czasu przejrzyj wszystkie tagi rozpakowywania zawartości, które nie mają ustawionej wcześniej klasy. Uwaga: ta metoda nie usuwa tagów samozamykających się, jak
na przykład poniżej.
źródło
Okazało się to dość iluzoryczne. Wartość danych wejściowych nie jest aktualizowana przed wykonaniem kodu wewnątrz funkcji zdarzenia wklejania. Próbowałem wywoływać inne zdarzenia z funkcji wklejania zdarzenia, ale wartość wejściowa nadal nie jest aktualizowana z wklejonym tekstem wewnątrz funkcji jakichkolwiek zdarzeń. To są wszystkie zdarzenia oprócz keyup. Jeśli wywołujesz keyup z funkcji wklejania zdarzenia, możesz zdezynfekować wklejony tekst z funkcji zdarzenia blokowania. tak jak ...
Jest tutaj jedno zastrzeżenie. W przeglądarce Firefox, jeśli zresetujesz tekst wejściowy przy każdym zestawieniu klawiszy, jeśli tekst jest dłuższy niż widoczny obszar dozwolony przez szerokość wejściową, to zresetowanie wartości przy każdym zestawieniu klawiszy przerywa działanie przeglądarki, która automatycznie przewija tekst do pozycji daszka na koniec tekstu. Zamiast tego tekst przewija się z powrotem na początek, pozostawiając niewidoczny kursor.
źródło
Skrypt do usuwania znaków specjalnych ze wszystkich pól za pomocą klasy portlet-form-input-field:
źródło
źródło