0

我正在尝试在带有 jQ​​uery Mobile 的 textarea 中使用 max-length,但我遇到了一个奇怪的问题 - 问题是无论是否在 javascript 中使用 return 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 来测试这个,我还没有在其他地方测试过,但我想看看是否有我遗漏的东西。

有什么线索吗?

4

2 回答 2

0

My previous note about the line breaks wasn't the answer. The answer was that each time the function got called, it was reading the maxLength property newly. For some reason, in reading the maxLength property, the count was getting messed up.

When I switched the variable for the maxLength value to a number (1150) instead of a making it read the property, it worked perfectly.

EDIT WITH REAL ANSWER:

Actually, the real answer was that I had unclosed html tags, so who knows what it was doing. When I fixed the tags, all was well

于 2012-05-16T13:45:48.147 回答
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);  
  }  
});  
/*****************************/
于 2013-04-14T10:20:15.527 回答