Javascript 单击退格或删除字符时,剩余字符不递减
我已经编写了按键事件来显示文本区域控件的剩余字符。它当前显示键入时剩余的字符数,但在单击后退键或从文本区域删除某些字符时不会减少。谁能告诉我问题出在哪里Javascript 单击退格或删除字符时,剩余字符不递减,javascript,jquery,Javascript,Jquery,我已经编写了按键事件来显示文本区域控件的剩余字符。它当前显示键入时剩余的字符数,但在单击后退键或从文本区域删除某些字符时不会减少。谁能告诉我问题出在哪里 $('#GeneralAgreementName').keypress(function () { if (this.value.length > 150) { return false; } else { $("#remainingGen
$('#GeneralAgreementName').keypress(function () {
if (this.value.length > 150) {
return false;
}
else {
$("#remainingGeneralAgreementName").html("Remaining characters : " + (150 - this.value.length));
}
});
使用
keydown
事件代替keypress
。另外,不确定为什么从事件处理程序返回false。相反,将最大长度添加到文本框中,只返回其余字符
$('#GeneralAgreementName').keydown(函数(){
var charactersLeft=150-this.value.length;
$(“#remainingGeneralAgreementName”).html(“剩余字符:+(charactersLeft>0?charactersLeft:0));
});代码>
尝试使用按键功能
$('#GeneralAgreementName').keydown(函数(){
如果(this.value.length>150){
返回false;
}
否则{
$(“#remainingGeneralAgreementName”).html(“剩余字符:+(150-this.value.length));
}
});代码>
不要返回false
当长度超过限制时,它会阻止textarea获得任何输入
要么:
- 如果事件处理程序中的值太长,则截断该值
- 如果数据太长,请防止提交
- 在文本字段上设置
maxlength
属性,使其无法输入太多字符
…只是永远不要在事件处理程序中返回false
另外,使用keyup
和keydown
代替keypress
:
$('#GeneralAgreementName').on('keyup keydown', function () ...
HTML有一个maxlength属性,所以请使用它。这将防止用户添加更多字符,无需自己处理。现在,您应该侦听输入事件,以便在用户键入或粘贴内容时捕获该事件
$(“[maxlength]”)。在(“输入”上,函数(){
var inp=$(此),
sel='[for=“”+inp.attr('id')+“]”。剩余',
剩余=parseInt(inp.attr(“maxlength”)-inp.val().length;
$(sel).html(剩余+剩余字符);
}).触发(“输入”)代码>
10
20
55
因为您不检查该键是否将实际添加字符。您不使用maxlength有什么原因吗?@epascarello他为什么需要这样做,以及它如何解决问题?@MikaelLennholm,因为键入150个字符,您不能点击backspace,maxlength将阻止输入…@epascarello但是检查键是否添加字符会解决问题吗?因为您知道返回false或者是真的。。。。退格不应该是错误的。Tab不应为False仍然存在与OP States相同的问题需要keyup
实际仍然存在与OP States相同的问题键入150个字符并单击backspace,不删除任何内容。也不考虑粘贴(不同的问题)的理解,除了复制粘贴它现在应该可以工作。$('GeneralAgreementName').on('keyup-keydown',function(){if(this.value.length>150){//return false;}else{$(“#remainingGeneralAgreementName”).html(“剩余字符:“+(150-this.value.length));});我删除了返回false,但它允许我输入超过所需长度的字符。如何设置最大长度。我正在使用mvc razor文本区域控件。在该控件上设置maxlength没有help@Tom我不熟悉Razor,所以我不知道。您可以使用this.value=this.value.substring(0,150);
(您过去常常返回false
)