当按下keypressup事件上的单个键时,textarea会打印两个字符

时间:2014-05-28 07:58:42

标签: javascript jsp

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

我为textarea写了一个JavaScript函数,其中“。”之后。 - 点那些字符是自动大写字母。

如何删除一个字符和textarea只打印一个字符?因为当我按下单键时他们会打印两个字符。 这个函数在“。”之后使用大写字母。点并在textarea上设置按键事件。

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;
}

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您似乎只需要在添加新字符之前删除最后一个字符。因此,这样的事情应该有用(虽然未经测试)。

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替换为它即可。

答案 1 :(得分:0)

要停止事件的默认行为,您可以使用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
}

Demo