我正在尝试在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对此进行测试,我还没有在其他地方进行过测试,但我想知道是否有一些我遗漏的东西。
任何线索?
答案 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);
}
});
/*****************************/