2010-02-03 14 views
11

Czy można wykryć liczbę wklejonych znaków w polu tekstowym HTML i anulować wklejanie w przypadku przekroczenia limitu?ograniczenie liczby wklejanych znaków w obszarze tekstowym

Edytuj: staram się uniemożliwić użytkownikowi wklejenie ogromnej ilości znaków (~ 3 miliony), ponieważ powoduje awarię niektórych przeglądarek. Dlatego chcę anulować wklej, zanim ich przeglądarka zablokuje się. Robię edytor dokumentów, gdzie użytkownicy mogą to wypróbować. Ale mogą pisać tyle, ile chcą.

+0

Naprawdę nie można zapobiec awariom własnych przeglądarek, zawsze znajdą sposób, aby to zrobić :-) – Bergi

Odpowiedz

11

można to zrobić w jQuery tak:

$(document).ready(function(){ 
function limits(obj, limit){ 

    var text = $(obj).val(); 
    var length = text.length; 
    if(length > limit){ 
     $(obj).val(text.substr(0,limit)); 
    } else { // alert the user of the remaining char. I do alert here, but you can do any other thing you like 
     alert(limit -length+ " characters remaining!"); 
    } 
} 


$('textarea').keyup(function(){ 

    limits($(this), 20); 
}) 

    }) 

zobaczyć demo here.

+11

Przydatne podczas kopiowania/wklejania za pomocą skrótów klawiaturowych lub gdy użytkownik pisze bezpośrednio w polu, ale jak to zrobić, gdy użytkownik wklei długi tekst za pomocą prawego przycisku myszy i menu kontekstowego? – Gabriel

0

Używałbym jQuery i dodałem obsługę zdarzeń dla obszaru tekstowego. Po uruchomieniu programu obsługi wykonaj liczenie i odpowiedz zgodnie z potrzebami.

+1

Nie ma sposobu - o ile wiem - wykrycia pasty i odróżnienia jej od normalnej wkład. Również nie ma sposobu na usunięcie pasty, najlepiej można usunąć znaki, które sprawią, że tekst przekroczy limit. –

+0

Śledź każdą operację w obszarze tekstowym, zachowaj poprzedni tekst w pamięci podręcznej (dla każdego klawisza), jeśli wklej powoduje przekroczenie limitu, po prostu użyłeś wcześniej buforowanej wersji, aby ją zresetować. W tym przypadku nie ma potrzeby rozróżniania normalnego wprowadzania danych i wklejania. – Art

2

W IE można użyć zdarzenia onPaste. (MSDN documentation)

W przeglądarkach Firefox, Safari, Opera i Chrome można użyć zdarzenia onInput (Dottoro.com reference). To zdarzenie jest uruchamiane, gdy treść tekstu elementu jest zmieniana za pośrednictwem interfejsu użytkownika, w tym wklejania.

6
$("textarea").blur(function(event) { 
    var maxLength = 3000000; 
    var length = this.value.length; 
    if (length > maxLength) { 
     //reassign substring of max length to text area value 
     this.value = this.value.substring(0, maxLength); 
     alert(maxLength + ' characters allowed, excess characters trimmed'); 
    } 
}); 

Ten jQuery przywiązuje anonimową funkcję do pola tekstowe, to przycinanie tekstu i ostrzega użytkownika, można również dołączyć go do zdarzenia naciśnięcia klawisza.

Zobacz: http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html w celu uzyskania dalszych informacji na ten temat.

2

Nie można uzyskać dostępu do zawartości schowka za pomocą JS, więc nie można tego uniemożliwić. Istnieją jednak trzy opcje:

  1. Nie zezwalaj użytkownikowi na wklejanie zawartości (byłoby to naprawdę zły pomysł na UX).
  2. Użyj zdarzenia onPaste, aby wkleić wklejoną zawartość z 0 do limitu znaków po wklejeniu.
  3. Użyj wtyczki javascript/flash (nie będzie działać na urządzeniach mobilnych).
  4. pomocą apletu lub Silverlight (nie podoba mi się ten jeden)

Są to tylko niektóre propozycje, a jeśli znaleźć inny sposób, aby to zrobić, proszę dać mi znać go.

Powiązane problemy