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);  
  }  
});  
/*****************************/
Другие вопросы по тегам