Я хотел бы иметь некоторые функции, с помощью которых, если я напишу
<textarea maxlength="50"></textarea>
<textarea maxlength="150"></textarea>
<textarea maxlength="250"></textarea>
он автоматически установит максимальную длину для textArea. По возможности не предоставляйте решение в jQuery.
Примечание: это можно сделать, если я сделаю что-то вроде этого:
<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))
}
Скопировано с. Как лучше всего имитировать атрибут «maxlength» ввода HTML в текстовой области HTML?
Но дело в том, что я не хочу писать onKeyPress и onKeyUp каждый раз, когда объявляю textArea.
javascript
html
textarea
Ракеш Жуял
источник
источник
Ответы:
источник
onblur
не будет обрабатывать вставку, пока пользователь не выйдет за пределы текстового поля.onkeyup
не будет обрабатывать вставку, если это делается через контекстное меню или меню браузера. Этот подход работает, если вам не нужно скрининг для вставки. См. Этот ответ для подхода, основанного на таймере stackoverflow.com/a/10390626/1026459Я знаю, что вы хотите избежать jQuery, но поскольку для решения требуется JavaScript, это решение (с использованием jQuery 1.4) является наиболее продуманным и надежным.
Вдохновленный, но улучшенный ответ Даны Вудман:
Отличия от этого ответа: Упрощенный и более общий, с использованием jQuery.live, а также без установки val, если длина в порядке (приводит к рабочим клавишам со стрелками в IE и заметному ускорению в IE):
РЕДАКТИРОВАТЬ: обновленная версия для jQuery 1.7+ , используя
on
вместоlive
источник
Обновление.
.live()
Вместо этого используйте решение Eirik, так как оно более надежное.Несмотря на то, что вам нужно решение, в котором не используется jQuery, я подумал, что добавлю его для тех, кто найдет эту страницу через Google и ищет решение в стиле jQuery:
Надеюсь, это будет полезно для вас, гуглеры ...
источник
HTML5 добавляет
maxlength
атрибут кtextarea
элементу, например:В настоящее время это поддерживается в Chrome 13, FF 5 и Safari 5. Неудивительно, что это не поддерживается в IE 9. (Проверено в Win 7).
источник
Это решение позволяет избежать проблемы в IE, когда последний символ удаляется при добавлении символа в середине текста. Он также отлично работает с другими браузерами.
Затем моя проверка формы решает любые проблемы, когда пользователь мог вставить (кажется, проблема только в IE) текст, превышающий максимальную длину текстового поля.
источник
Это немного измененный код, который я только что использовал на своем сайте. Улучшено отображение пользователю количества оставшихся символов.
(Еще раз извините OP, который не запрашивал jQuery. Но серьезно, кто не использует jQuery в наши дни?)
НЕ тестировался с международными многобайтовыми символами, поэтому я не уверен, как именно он работает с ними.
источник
Также добавьте следующее событие для вставки в текстовое поле:
источник
из HTML атрибута maxlength w3schools.com
Для IE8 или более ранних версий вам необходимо использовать следующие
PS
из HTML атрибута maxlength w3schools.com
источник
Лучшее решение по сравнению с обрезкой значения текстового поля.
источник
Вы можете использовать jQuery, чтобы сделать его простым и понятным
JSFiddle ДЕМО
Он протестирован в
Firefox
,Google Chrome
иOpera
источник
text
он заполняется «значением» текс-области до того, как он будет обновлен. Это значит, что ваш тест должен бытьif( text.length +1 > maxlength) {return false;}
. В противном случае можно было бы помещать толькоmaxlength - 1
символы внутрь:/
if(text.length+1 > maxlength)
либоif(text.length >= maxlength)
...Небольшая проблема с приведенным выше кодом заключается в том, что val () не запускает событие change (), поэтому, если вы используете backbone.js (или другие фреймворки для привязки модели), модель не будет обновлена.
Я публикую, решение отлично поработало для меня.
источник
Недавно я реализовал
maxlength
поведениеtextarea
и столкнулся с проблемой, описанной в этом вопросе: Chrome неправильно считает символы в текстовом поле с атрибутом maxlength .Так что все реализации, перечисленные здесь, будут работать с небольшими ошибками. Чтобы решить эту проблему, я добавляю
.replace(/(\r\n|\n|\r)/g, "11")
ранее.length
. И учел это при резке струны.Я закончил примерно так:
Не уверен, что это полностью решит проблему, но пока это работает для меня.
источник
Попробуйте этот jQuery, который работает в IE9, FF, Chrome и предоставляет пользователям обратный отсчет:
источник
Попробуйте использовать этот пример кода:
источник
Это намного проще:
источник
maxlength
потому что вы можете вставлять строки, длина которых превышает желаемую.