当在keypressup事件中按下单个键时,Textarea打印两个字符



我使用谷歌虚拟键盘,并设置在文本区。
当我在textarea上写东西时在textarea中打印两个字符一个是大写的,另一个是小写的

我为textarea写了一个JavaScript函数,在"。"之后-点这些字符是自动大写字母。

如何删除一个字符和文本区打印只是只有一个字符?因为当我按单键时,它们打印两个字符。这个函数用于"。"点后面的大写字母,并在文本区域设置按键事件。

function caps(e, textarea, value){
    //debugger;
    var unicode=e.keyCode? e.keyCode : e.charCode;
    var str=value.trim();
    str=str.charAt(str.length-1);
    if((str=="." || value.length==0) && (unicode>=97 && unicode<=122)){
        textarea.value=textarea.value+String.fromCharCode(unicode).toUpperCase();
        return false;
    }
    return true;
}

要停止事件的默认行为,可以使用e.preventDefault();。比如

function caps(e, textarea, value){
    //debugger;
    var unicode=e.keyCode? e.keyCode : e.charCode; //my keyboard threw out ascii..
    var str=value.trim();
    str=str.charAt(str.length-1);
    if(str=="." || value.length==0){
      textarea.value=textarea.value+String.fromCharCode(unicode).toUpperCase();
        e.preventDefault();
    }
}

input.addEventListener("keypress",function(e){
    if(e.keyCode==8) return true
     caps(e,input,input.value)
},false)

您可以使用return false,但您需要做类似

的事情
input.onkeypress=function(){
    if(e.keyCode==8) return true
    return caps(e,input,input.value); //pass false from caps too event
}
演示

如果我理解正确,似乎您只需要在添加新字符之前删除最后一个字符。因此,像这样的东西应该可以工作(虽然它没有经过测试)。

if((str=="." || value.length==0) && (unicode>=97 && unicode<=122)){
    /*remove last character before adding new one*/
    textarea.value = textarea.value.substring(0, textarea.value.length - 1);
    textarea.value=textarea.value+String.fromCharCode(unicode).toUpperCase();
    return false;
}

但是,根据调用该函数的方式,您可以首先阻止该字符被打印。


对不起,我意识到你在问题标题中说这是按键事件。在这种情况下,e.preventDefault是你的朋友,如另一个答案所示。你可以用它代替你的return false

最新更新