我使用谷歌虚拟键盘,并设置在文本区。
当我在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
。