Chciałbym mieć jakąś funkcjonalność, o której piszę
<textarea maxlength="50"></textarea>
<textarea maxlength="150"></textarea>
<textarea maxlength="250"></textarea>
automatycznie narzuci maxlength na textArea. Jeśli to możliwe, nie dostarczaj rozwiązania w jQuery.
Uwaga: można to zrobić, jeśli zrobię coś takiego:
<textarea onkeypress="return imposeMaxLength(event, this, 110);" rows="4" cols="50">
function imposeMaxLength(Event, Object, MaxLen)
{
return (Object.value.length <= MaxLen)||(Event.keyCode == 8 ||Event.keyCode==46||(Event.keyCode>=35&&Event.keyCode<=40))
}
Skopiowano z Jaki jest najlepszy sposób emulacji atrybutu wejściowego HTML „maxlength” w obszarze tekstowym HTML?
Ale chodzi o to, że nie chcę pisać onKeyPress i onKeyUp za każdym razem, gdy deklaruję textArea.
javascript
html
textarea
Rakesh Juyal
źródło
źródło
Odpowiedzi:
źródło
onblur
nie obsłuży wklejania, dopóki użytkownik nie wyjdzie z obszaru tekstu.onkeyup
nie obsłuży wklejania, jeśli odbywa się to za pośrednictwem menu kontekstowego lub menu przeglądarki. To podejście działa, jeśli nie musisz sprawdzać w celu wklejenia. Zobacz tę odpowiedź, aby zapoznać się z podejściem opartym na zegarze stackoverflow.com/a/10390626/1026459Wiem, że chcesz uniknąć jQuery, ale ponieważ rozwiązanie wymaga JavaScript, to rozwiązanie (przy użyciu jQuery 1.4) jest najbardziej zrozumiałe i niezawodne.
Zainspirowany, ale lepszy od odpowiedzi Dany Woodman:
Zmiany w tej odpowiedzi to: Uproszczone i bardziej ogólne, przy użyciu jQuery.live, a także bez ustawiania wartości, jeśli długość jest OK (prowadzi do działających klawiszy strzałek w IE i zauważalnego przyspieszenia w IE):
EDYCJA: Zaktualizowana wersja dla jQuery 1.7+ , używając
on
zamiastlive
źródło
Zaktualizuj Użyj rozwiązania Eirik, używając
.live()
zamiast tego, ponieważ jest nieco bardziej niezawodne.Chociaż chciałeś rozwiązania, które nie używa jQuery, pomyślałem, że dodam je dla każdego, kto znajdzie tę stronę za pośrednictwem Google i szuka rozwiązania w stylu jQuery:
Mam nadzieję, że jest to przydatne dla pracowników Google ...
źródło
HTML5 dodaje
maxlength
atrybut dotextarea
elementu, na przykład:Jest to obecnie obsługiwane w Chrome 13, FF 5 i Safari 5. Nic dziwnego, że nie jest obsługiwane w IE 9. (testowane na Win 7)
źródło
To rozwiązanie pozwala uniknąć problemu w IE, gdzie ostatni znak jest usuwany, gdy dodawany jest znak w środku tekstu. Działa również dobrze z innymi przeglądarkami.
Moja walidacja formularza zajmuje się następnie wszelkimi problemami, w których użytkownik mógł wkleić (tylko wydaje się, że jest to problem w IE) tekst przekraczający maksymalną długość obszaru tekstu.
źródło
To jest trochę zmodyfikowany kod, którego właśnie używałem w mojej witrynie. Ulepszono wyświetlanie użytkownikowi liczby pozostałych znaków.
(Jeszcze raz przepraszam dla OP, który nie zażądał jQuery. Ale poważnie, kto nie używa obecnie jQuery?)
NIE został przetestowany z międzynarodowymi znakami wielobajtowymi, więc nie jestem pewien, jak to dokładnie działa.
źródło
Dodaj również następujące zdarzenie, aby poradzić sobie z wklejaniem do obszaru tekstu:
źródło
z HTML maxlength Attribute w3schools.com
W przypadku IE8 lub wcześniejszych wersji musisz użyć następującego
PS
z HTML maxlength Attribute w3schools.com
źródło
Lepsze rozwiązanie w porównaniu do przycinania wartości obszaru tekstowego.
źródło
Możesz użyć jQuery, aby było to łatwe i przejrzyste
JSFiddle DEMO
Jest testowane
Firefox
,Google Chrome
aOpera
źródło
text
jest wypełniony "wartością" texarea, zanim zostanie zaktualizowany. Oznacza to, że twój test powinien byćif( text.length +1 > maxlength) {return false;}
. W przeciwnym razie można by umieścić tylkomaxlength - 1
znaki w środku:/
if(text.length+1 > maxlength)
alboif(text.length >= maxlength)
...Mały problem z powyższym kodem polega na tym, że val () nie wyzwala zdarzenia change (), więc jeśli używasz backbone.js (lub innych frameworków do wiązania modelu), model nie zostanie zaktualizowany.
Publikuję rozwiązanie, które zadziałało świetnie.
źródło
Niedawno zaimplementowałem
maxlength
zachowanietextarea
i napotkałem problem opisany w tym pytaniu: Chrome nieprawidłowo liczy znaki w obszarze tekstowym z atrybutem maxlength .Tak więc wszystkie wymienione tutaj implementacje będą działać trochę błędnie. Aby rozwiązać ten problem, dodam
.replace(/(\r\n|\n|\r)/g, "11")
wcześniej.length
. I pamiętaj o tym podczas cięcia sznurka.Skończyło się na czymś takim:
Nie jestem pewien, czy to całkowicie rozwiązuje problem, ale na razie działa.
źródło
Wypróbuj to jQuery, które działa w IE9, FF, Chrome i zapewnia odliczanie dla użytkowników:
źródło
Spróbuj użyć tego przykładu kodu:
źródło
To jest dużo łatwiejsze:
źródło
maxlength
ponieważ możesz wkleić ciągi, które są dłuższe niż żądana długość.