HTML5 Textarea Максимальная длина заканчивается рано
Я пытаюсь использовать максимальную длину в текстовой области с jQuery Mobile, и я столкнулся со странной проблемой - проблема в том, что с или без возврата false, используемого в javascript, текстовая область мешает мне вводить текст в любом месте от 15 до 60 персонажи слишком рано..
Свойство maxLength установлено в 1150, и я могу печатать от 1090 до 1115 символов. Я не знаю, является ли это функцией использования копирования и вставки, так как это единственный способ, которым я проверял это, но это кажется странным.
Вот код:
$(document).delegate('#main','pageinit',function() {
$('#title,#description').keypress,function(e){
var cur=$(this).val().length,
max=$(this).prop('maxLength'), rem=max-cur,
ch=$(this).parents('.ui-bar').find('.char-rem'),
red=$(this).parents('.ui-bar').find('.char-rem.red'),
green=$(this).parents('.ui-bar').find('.char-rem.green');
ch.children('span').html(rem);
if(rem <= 10)
{
green.removeClass('green')
ch.addClass('red');
} else {
red.removeClass('red')
ch.addClass('green')
}
if(rem == 0)
{
if(e.which!= 8)
{
return false;
}
}
})
})
Что происходит каждый раз, так это то, что я получаю небольшое количество оставшихся символов - но больше нуля - и больше не могу печатать. То же самое происходит, если я удалю следующее:
if(rem == 0)
{
if(e.which!= 8)
{
return false;
}
}
Я пробовал это с keydown и keyup, а также с внутренним или внешним pageinit, и сделал различные другие корректировки, и я проверил количество символов в textarea с помощью свойства textarea textLength, и каждый раз результат один и тот же.
Прямо сейчас я использую Chromium, чтобы проверить это, и я не проверял это где-либо еще, но я хочу видеть, есть ли что-то, что я просто пропускаю.
Есть какие-нибудь подсказки?
2 ответа
Моя предыдущая заметка о разрыве строки не была ответом. Ответ состоял в том, что каждый раз, когда вызывается функция, она снова считывает свойство maxLength. По какой-то причине при чтении свойства maxLength счетчик запутался.
Когда я переключил переменную для значения maxLength на число (1150) вместо того, чтобы заставить его читать свойство, он работал отлично.
РЕДАКТИРОВАТЬ С РЕАЛЬНЫМ ОТВЕТОМ:
На самом деле, реальный ответ состоял в том, что у меня были открытые теги html, так что кто знает, что он делал. Когда я исправил теги, все было хорошо
Вот альтернативное решение. При этом maxlength будет работать и для текстовых областей.
/*****************************/
// SET MAX NUMBER OF CHARACTERS FOR ALL TEXTAREAS TROUGH ATTRIBUTE maxlength="*"
jQuery('textarea[maxlength]').keyup(function(){
//get the limit from maxlength attribute
var limit = parseInt($(this).attr('maxlength'));
//get the current text inside the textarea
var text = $(this).val();
//count the number of characters in the text
var chars = text.length;
//Create counter, once
if (!jQuery(this).prev("span").length) {
jQuery(this).before('(Tecken <span class="charsleft"></span> av max ' + limit + ')');
}
//Update counter
jQuery(this).prev('.charsleft').html(chars);
//check if there are more characters then allowed
if(chars > limit){
//and if there are use substr to get the text before the limit
var new_text = text.substr(0, limit);
//and change the current text with the new text
jQuery(this).val(new_text);
}
});
/*****************************/