Problems:
If textarea length exceeds its limit, and we give the input in the middle of the text than it start the truncate character from the end. But i don't want that textarea behavior.
What I want is, I only want to allow textarea that takes only 4000 character. and if user try to enter extra character than it should not be allowed.
$(document).ready(function () {
var cursorPosition=0;
var enterKey_code=0;
var maxlength=4000;
var flag=0;
function setSelectionRange(input, selectionStart, selectionEnd) {
if (input.setSelectionRange) {
input.focus();
input.setSelectionRange(selectionStart, selectionEnd);
}
else if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
}
}
function setCaretToPos (input, pos) {
setSelectionRange(input, pos, pos);
}
$('#MaxChar').text(maxlength);
function countChar(key_event){
var text_value = $('#Comments').val();
var cursorPosition = $('#Comments').prop("selectionStart");
var len=text_value.length;
if (len > maxlength) {
flag=1;
$('#Comments').val(text_value.substring(0, maxlength));
}
$('#CurrentChar').html($('#Comments').val().length);
}
$('#Comments').keyup(function (key_event) {
countChar(key_event);
if(flag==1)
{
var c=$('#Comments');
setCaretToPos(c[0], cursorPosition+1);
flag=0;
}
});
$('#Comments').keydown(function (key_event) {
cursorPosition = $('#Comments').prop("selectionStart");
countChar(key_event);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrap">
<label id="CurrentChar">0</label> / <label id="MaxChar">0</label>
<br />
<textarea rows="20" cols="40" id="Comments"></textarea>
</div>