Javascript <;输入>;停止按键操作

Javascript <;输入>;停止按键操作,javascript,Javascript,html: {{form_小部件(experienceForm.description{ “attr”:{ 'class':'form control field max length field max length field line length', “行”:6 } })}} handleChangeLineCounter=函数(){ $('.fieldline length').keyup(函数(e){ e、 预防默认值(); var countLineNum=(this.value

html:


{{form_小部件(experienceForm.description{
“attr”:{
'class':'form control field max length field max length field line length',
“行”:6
}
})}}
handleChangeLineCounter=函数(){
$('.fieldline length').keyup(函数(e){
e、 预防默认值();
var countLineNum=(this.value.match(/\n/g)| |[]).length;
console.log(countLineNum);
checkEnterKey($(this),7,countLineNum);
});
}
函数checkEnterKey(getVarName、maxLine、countLine){
var msg2=maxLine-countLine+“对齐重新设置”;
如果((maxLine-countLine)==1 | |(maxLine-countLine)==0){
msg2=最大线-计数线+对齐重新设置;
}
getVarName.keypress(函数(e){
如果(e.which==13){
如果((最大线-计数线)<1){
返回false;
}
如果((maxLine-countLine)>0,则为else{
返回true;
}
}
});
$('.counter-msg-2').remove();
getVarName.after(“”+msg2+“”);
}
从上面的代码中,在函数
checkEnterKey()
中,当(
maxLine-countLine
)达到0时,我按delete键或backspace键,然后再次按enter键,键停止工作。 相反,如果(
maxLine-countLine
)未达到0,我按delete键或backspace键,然后再次按enter键,该键工作。
当我到达
(maxLine-countLine)=0时,如何使enter键工作?

您的代码存在一些问题:

  • 您正在为每个
    keyup
    添加一个新的
    keypress
    事件处理程序,这非常糟糕
  • 您正在使用JQuery中的
    remove()
    after()
    ,这比简单地放置元素和使用
    html()
    更昂贵
  • 下面的解决方案对上述问题进行了一些代码清理和补救

    //用于将事件处理程序附加到元素的主函数
    功能手柄更改线路计数器(最大值){
    //计数器的初始值
    $('.counter-msg-2').html(`${max}对齐restantes`);
    //按键事件仅允许处理所需的行
    //此代码不是keyup事件的一部分,因为返回
    //此处为false不会阻止密钥出现
    $('.字段行长度')。按键(功能(e){
    设diff=max-($(this).val().match(/\n/g)| |[]).length;
    如果(例如,哪个===13&&diff==0){
    返回false;
    }
    });
    //处理计数器显示的keyup事件
    //此代码不是按键事件的一部分,因为上次
    //输入键将丢失
    $('.fieldline length').keyup(函数(e){
    设diff=max-($(this).val().match(/\n/g)| |[]).length;
    
    让msg=((diff)当返回false时,您是否尝试过更改为
    maxLine-countLine<0
    ?我尝试过,但问题仍然存在,我尝试过了,您可以包含HTML吗?您似乎每次调用checkenterkey时都会绑定一个新事件,为什么不将键代码传递到函数中。此外,不确定在达到最大行后您将要执行什么操作很高兴能帮上忙。
    <div class="col-md-10 col-sm-10 col-xs-10">
        {{ form_widget(experienceForm.description, {
            'attr': {
                'class': 'form-control field-max-length field-max-length field-line-length',
                'rows': 6
            }
         })}}
    </div>
    
    handleChangeLineCounter = function() {
        $('.field-line-length').keyup(function (e) {
            e.preventDefault();
            var countLineNum = (this.value.match(/\n/g)||[]).length;
            console.log(countLineNum);
            checkEnterKey ($(this), 7, countLineNum);
        });
    }
    
    function checkEnterKey (getVarName, maxLine, countLine) {
        var msg2 = maxLine - countLine +' lignes restantes,';
        if ((maxLine - countLine) === 1 || (maxLine - countLine) === 0) {
            msg2 = maxLine - countLine +' ligne restante,';
        }
    
        getVarName.keypress(function(e) {
            if(e.which === 13) {
                if ((maxLine - countLine) < 1) {
                    return false;
                }
                else if ((maxLine - countLine) > 0) {
                    return true;
                }
            }
        });
    
        $('.counter-msg-2').remove();
        getVarName.after('<span class="counter-msg-2 m-r-5"><span class="counter_msg_2">' + msg2 + '</span></span>');
    }