我正在使用谷歌虚拟键盘并在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;
}
答案 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
}