Столкнулся с тем что атрибут maxlength и js-свойство value.length неправильно работают с textarea: если в поле есть двухсимвольные переносы строк (\r\n) — они считают их одним символом, соответственно есть риск не вписаться в ограничение на количество символов на бэкенде. Наговнокодил костыль-функцию для решения проблемы, возвращающую скорректированное значение maxlength в соответствии с количеством переносов строк в поле:
function maxlengthfix(str, maxlength)
{
var newlines = (str.split(/\r/).length - 1) + (str.split(/\n/).length - 1);
maxlength = maxlength-newlines;
return (maxlength);
}