HTML5 Textarea Max-Length早期结束

时间:2012-05-16 01:28:05

标签: jquery html5 mobile textarea maxlength

我正在尝试在jQuery Mobile的textarea中使用max-length,我遇到了一个奇怪的问题 - 问题是,无论javascript中使用或不使用返回false,textarea阻止我从任何地方输入文本太早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 textLength属性验证了textarea中的字符数,每次结果都是相同。

现在,我正在使用Chromium对此进行测试,我还没有在其他地方进行过测试,但我想知道是否有一些我遗漏的东西。

任何线索?

2 个答案:

答案 0 :(得分:0)

我之前关于换行的说明不是答案。答案是每次调用函数时,都是新读取maxLength属性。 出于某种原因,在读取maxLength属性时,计数变得混乱。

当我将maxLength值的变量切换为数字(1150)而不是使其读取属性时,它完美地工作。

用真实答案编辑:

实际上,真正的答案是我有未公开的html标签,所以谁知道它在做什么。当我修复标签时,一切都很好

答案 1 :(得分:0)

这是另一种解决方案。这个maxlength也适用于textareas。

/*****************************/
// 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);  
  }  
});  
/*****************************/