Как ограничить максимальное количество символов, которое можно ввести в HTML <textarea>? Ищу кроссбраузерное решение.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Тег TEXTAREA не имеет атрибута MAXLENGTH, в отличие от тега INPUT.
Тег TEXTAREA работает, по крайней мере, не в большинстве стандартных браузеров. Очень простой и эффективный способ ограничить количество символов, которые могут быть напечатанный в теге onKeyPress:
<textarea onKeyPress = "return ( this.value.length < 50 );"></textarea>
Примечание:false, предотвращает нажатие любой кнопки, любая кнопкавключая - клавиша возврата.
Это работает, потому что логическое выражение сравнивает длину поля
перед добавлением нового символа к максимальной длине, которую вы хотите (50 в этом примере, используйте здесь свой собственный), и возвращает true, если есть место для еще одного, KeyPress, если нет. Возврат false из большинства событий отменяет действие по умолчанию.
Итак, если текущая длина уже равна 50 (или больше), обработчик возвращает false,
действие TEXTAREA отменяется, а символ не добавляется.
Одна ложка дёгтя - возможность вклеивания в KeyPress,
который не вызывает событие onPaste, обходя эту проверку.
Internet Explorer 5+ содержит событие onPaste, обработчик которого может содержать
контрольный. Однако обратите внимание, что вы также должны учитывать, сколько
персонажи ждут в буфере обмена, чтобы узнать, будет ли общая сумма
взять вас за предел или нет. К счастью, IE также содержит буфер обмена.
объект из оконного объекта. 1 Таким образом:
<textarea onKeyPress = "return ( this.value.length < 50 );"
onPaste = "return (( this.value.length +
window.clipboardData.getData('Text').length) < 50 );"></textarea>
Опять же, событие clipboardData и объект OnChange относятся только к IE 5+. Для кроссбраузерного решения вам просто нужно будет использовать обработчик OnBlur или TEXTAREA, чтобы проверить длину и обработать ее так, как вы хотите (беззвучно усечь значение, уведомить пользователя и т. д.). К сожалению, это не обнаруживает ошибку, поскольку она происходит, только когда пользователь пытается покинуть поле, что не так удобно.
Кроме того, здесь есть другой способ, включая готовый скрипт, который вы можете включить на свою страницу:
http://cf-bill.blogspot.com/2005/05/textarea-maxlength-revisited.html
Возможно, это только я и моя плохая арифметика, но у меня сложилось впечатление, что при использовании новых строк в текстовых областях IE и FF ведут себя иначе, чем Chrome в отношении maxlength. Имеет отношение к проблеме \r\n vs. \n (когда ваш текст содержит символы новой строки) ... Определенно, maxlength, похоже, не работает кроссбраузерно в Windows, по моему опыту ... Но здесь нет ничего нового, все та же старая глючный HTML / JS материал ...
HTML5 теперь позволяет Атрибут maxlength на <textarea>.
Он поддерживается всеми браузерами, кроме IE <= 9 и iOS Safari 8.4. См. таблица поддержки на caniuse.com.
@erdomester Он работает в поддерживаемых браузерах. Вы можете протестировать по ссылке w3c, которую я предоставил.
Я попробовал, и он работает, даже если я использовал maxlength = "500px". Но предоставленная вами ссылка была неактивной, когда я опубликовал этот комментарий, и отображаемая страница (я полагаю) показывала другие атрибуты, чем та, которая отображается сейчас.
Эта ссылка не на W3C, а на W3Schools, который известен тем, что публикует неверную информацию.
@Toby да, ты прав. Я должен был быть более ясным в своем комментарии. К сожалению, я не вижу возможности редактировать комментарий.
Для erdomester: maxlength для textarea работает нормально, но синтаксис maxlength = "500", а не 500px.
Вы можете знать, что символы новой строки могут подсчитываться по-разному при использовании maxlength, в зависимости от браузера. Взгляните на это объяснение для получения дополнительной информации.
$(function(){
$("#id").keypress(function() {
var maxlen = 100;
if ($(this).val().length > maxlen) {
return false;
}
})
});
Обратите внимание, что описанная выше функция onKeyPress предотвратит ввод любого текста в текстовое поле после достижения предела символов - никакие символы не могут быть удалены. Более надежный фрагмент позволит пользователю достичь максимального предела, а затем вернуться на место, чтобы удалить символы, чтобы получить текст ниже предела.