Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击退格或删除字符时,剩余字符不递减_Javascript_Jquery - Fatal编程技术网

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