Я знаю, что это немного поздно, но я просто должен был это выяснить.Мне пришлось заставить его работать с длинами в байтах UTF8 и разрешать определенные нажатия клавиш.Вот что я придумал:
checkContent = function (event) {
var allowedKeys = [8,46,35,36,37,38,39,40];
var contentLength = lengthInUtf8Bytes(jQuery(event.currentTarget).val());
var charLength = lengthInUtf8Bytes(String.fromCharCode(event.charCode));
if (charLength + contentLength > 20) {
if(jQuery.inArray(event.keyCode, allowedKeys) == -1) {
event.preventDefault();
}
}
}
countLength = function(event) {
var len = lengthInUtf8Bytes(jQuery(event.currentTarget).val());
jQuery('#length').html(len);
}
lengthInUtf8Bytes = function(str) {
var m = encodeURIComponent(str).match(/%[89ABab]/g);
return str.length + (m ? m.length : 0);
}
jQuery(function(){jQuery("#textarea").keypress(function(event){checkContent(event)}).keyup(function(event){countLength(event)})});
Вам нужно иметь текстовое поле с идентификатором #textarea и элемент для отображения текущей длины с идентификатором #length.
Событие нажатия клавиши определяет, разрешить или нет нажатие клавиши.Событие keyup подсчитывает размер данных в поле после того, как нажатие разрешено / запрещено.
Этот код работает со следующими клавишами: home, end, pagedown, pageup, backspace, delete, up, down,Лево и право.Это не касается вставки из буфера обмена.
Надеюсь, кто-то найдет это полезным!