function update_textlen(field) {
// count the characters used of maxLenght in text field and report it to a div
var maxlen = field.maxLength;
var fval = field.value;
var flen = fval.length;
var tlen = fval.replace(/\n/g, "\r\n").length;
var dlen = tlen - flen;
var warn = 0;
// now clip more characters of the end if neeeded
if (tlen > maxlen) {
field.value = fval.substring(0, (maxlen - dlen));
var tlen = field.value.replace(/\n/g, "\r\n").length;
var warn = ("input exceeded the " + maxlen + " allowed characters!");
}
var counter = "(" + tlen + "/" + maxlen + ")";
var target = field.id + ".len";
document.getElementById(target).innerHTML = counter;
if (warn) {
alert(warn);
}
}
update_textlen(document.getElementById('item.text'));
function resize_textarea(area) {
//auto expand textarea to fit new number of lines
area.style.height = "20px";
area.style.height = (area.scrollHeight) + "px";
}
#item-wrap {
width: 502px;
margin: 8px 8px 8px 8px;
background: #eee;
padding: 16px;
/* background: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#ccc)); */
/* background: -moz-linear-gradient(top, #eee, #ccc); */
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
}
.form-style-2019 input[type="text"],
.form-style-2019 textarea,
.form-style-2019 select {
background: #FFF;
margin-left: 3px;
margin-top: 6px;
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
width: 100%;
display: block;
outline: none;
border: none;
height: 20px;
line-height: 20px;
font-size: 17px;
padding: 0;
font-family: Monaco, Courier, mono-space;
}
<div name="item" id="item-wrap">
<div id="item">
<form action="#" method="post" name="item.title" onsubmit="return false;" class="form-style-2019">
text input:
<div style="float:right" id="item.text.len">(128/1024)</div>
<textarea id="item.text" name="input" wrap="virtual" placeholder="text" maxlength="1024" onfocus="resize_textarea(this);update_textlen(this);" onblur="update_textlen(this);resize_textarea(this);" onkeyup="update_textlen(this);resize_textarea(this);" tabindex="1">line1 Bla bla bla
line2 test 123</textarea>
</form>
</div>
</div>