我有以下代码:
$(document).ready(function (e) {
$('#input').keydown(function (e)
{
var inpData_lenght = $(this).val().length+1;
var max_length = 15;
if (inpData_lenght >= max_length)
{
if (inpData_lenght > max_length)
{
if ((e.keyCode != 8) && (e.keyCode != 46))
{
e.stopImmediatePropagation();
e.preventDefault();
}
}
$(this).css({'background-color': '#ff8080'});
}
else
{
$(this).css('background-color', '');
}
});
});
HTML:
<textarea id="input"></textarea>
当max_length-1
个字符只有max_length-3
时,textarea不会将背景更改为白色,是否有解决方法?我知道这与计算为字符的退格键或删除键有关。
答案 0 :(得分:3)
最好使用keyup()
代替keydown()
,因为您将获得结果输入值。如果长度超过最大值,只需将输入值替换为前一个。 http://jsfiddle.net/9Ed8h/
$(document).ready(function (e) {
$('#input').keyup(function (e)
{
var inpData_lenght = $(this).val().length;
var max_length = 15;
if (inpData_lenght >= max_length)
{
if (inpData_lenght > max_length)
{
$(this).val(this.lastValue);
}
$(this).css({'background-color': '#ff8080'});
}
else
{
$(this).css('background-color', '');
}
this.lastValue = $(this).val();
});
});
答案 1 :(得分:0)
使用keyup将解决您的问题。你应该想办法防止人们按住钥匙。 (如果按住键2秒钟,将超过15个字符的限制)
答案 2 :(得分:0)
组合maxlength和keyup应该是最简单的方法。
<textarea id="input" maxlength=3></textarea>
和
$(document).ready(function (e) {
$('#input').keyup(function (e)
{
var inpData_lenght = $(this).val().length;
var max_length = 3;
if (inpData_lenght >= max_length)
{
$(this).css({'background-color': '#ff8080'});
}
else
{
$(this).css('background-color', '');
}
});
});
请参阅小提琴:http://jsfiddle.net/DEjgd/4/
答案 3 :(得分:0)
如果您需要keydown
的解决方法,则以下内容应该有效:
var maxLength = 15;
var currLength = this.value.length;
if (e.keyCode == 8 || e.keyCode == 46) {
var expectedLength = currLength - 1; // distinguish here!
} else {
var expectedLength = currLength + 1;
if (expectedLength > maxLength) {
e.stopImmediatePropagation();
e.preventDefault();
}
}
if (expectedLength >= maxLength) {
$(this).css('background-color', '#ff8080');
} else {
$(this).css('background-color', '');
}
答案 4 :(得分:-1)
您可以使用类似
的内容,而不是使用javascript条件<textarea maxlength="15" id="input"/>