如果处理字符串值的textarea是只读的,那么如何在使用javascript的虚拟键盘上使用capslock函数?
我用过这个代码,但它只检测capslock是开还是关如果处理字符串值的textarea是只读的,那么如何在使用javascript的虚拟键盘上使用capslock函数?,javascript,jquery,Javascript,Jquery,我用过这个代码,但它只检测capslock是开还是关 $(function () { var isShiftPressed = false; var isCapsOn = null; $("#txtName").bind("keydown", function (e) { var keyCode = e.keyCode ? e.keyCode : e.which; if (keyCode == 16)
$(function () {
var isShiftPressed = false;
var isCapsOn = null;
$("#txtName").bind("keydown", function (e) {
var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode == 16) {
isShiftPressed = true;
}
});
$("#txtName").bind("keyup", function (e) {
var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode == 16) {
isShiftPressed = false;
}
if (keyCode == 20) {
if (isCapsOn == true) {
isCapsOn = false;
$("#error").hide();
} else if (isCapsOn == false) {
isCapsOn = true;
$("#error").show();
}
}
});
$("#txtName").bind("keypress", function (e) {
var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode >= 65 && keyCode <= 90 && !isShiftPressed) {
isCapsOn = true;
$("#error").show();
} else {
$("#error").hide();
}
});
});
$(函数(){
var=false;
var isCapsOn=null;
$(“#txtName”).bind(“keydown”,函数(e){
var-keyCode=e.keyCode?e.keyCode:e.which;
if(keyCode==16){
IsShift=true;
}
});
$(“#txtName”).bind(“keyup”,函数(e){
var-keyCode=e.keyCode?e.keyCode:e.which;
if(keyCode==16){
IsShift=false;
}
如果(键代码==20){
如果(isCapsOn==true){
isCapsOn=false;
$(“#错误”).hide();
}else if(isCapsOn==false){
isCapsOn=true;
$(“#错误”).show();
}
}
});
$(“#txtName”).bind(“按键”,函数(e){
var-keyCode=e.keyCode?e.keyCode:e.which;
如果(键码>=65&&keyCode更换
$("#txtName")
与
这就是我使用的代码,所以当我在键盘上按a-z时,文本区域中会有a-z。但即使capslock在其上,仍然是小写的。你可以使用onkeypress而不是onkeydown。后者只检测按下了哪个键;前者(尽管它的名称包含“keypress”)此链接详细说明:注意,并非所有浏览器都支持onkeypress
此外,将charcode转换为char的代码效率低下,并且正在将大写charcodes转换为小写chars。以下是一些用于侦听按键的代码,在每次按键时,都会提醒用户按下了哪个char
document.onkeypress = function(event){
event = event || window.event;
var key = event.keyCode;
alert(String.fromCharCode(key));
}
你想做什么?当然,代码在只读字段上不起作用,因为不会触发keypress,keydown事件。你怎么能做什么?我使用event.keycode在文本区域中有一个输出,即使它是只读的,但我想做的是当我在caps上单击时,我所按的值将在caps上像普通键盘一样锁定document.onkeydown=function(){document.getElementById(“txtInput”).focus();if(event.keyCode==“65”){document.getElementById(“txtInput”).value+=“a”;btnA.style.backgroundColor=“#00bff”;}if(event.keyCode==“66”){document.getElementById(“txtInput”).value+=“b”;btnB.style.backgroundColor=“#00bff”;}对不起,我听不懂你的英语;仍然不确定你的问题是什么。你一直在谈论的这个文本区域的ID是什么?这是我假设你的问题的答案。文本区域仍然没有输入,因为它处于只读状态,所以不要设置为只读?这就是只读的意思:只读:不可写。你有我甚至没有告诉我们哪个控件是textarea…我怀疑你甚至没有向我们显示你要询问的代码。你似乎在问为什么当textarea为只读时,textarea中应该显示的输出没有显示。你需要向我们显示试图设置该textarea值的代码。另一个问题请参阅我的其他答案猜猜你的问题可能是什么。是的,那是因为你没有添加正确的字符代码。参见我的第三个答案。另外,我不知道你从哪里得到了上面的代码,但它看起来非常糟糕。你有26个不需要的if块。你可以使用诸如charCodeAt和/或fromCharCode之类的函数。你不必感到抱歉,也许我有点苛刻。重点是有更好的方法。我不认为你自己写的…如果是这样的话,我很惊讶你还不知道你在使用大写代码。如果你不介意的话,你能改变我的代码,不使用太多if语句吗…谢谢:)你应该问一个单独的问题。
if (event.keyCode == "65"){
document.getElementById("txtInput").value+=val1;
btnA.style.backgroundColor="#00bfff";
}
if (event.keyCode == "66"){
document.getElementById("txtInput").value+="b";
btnB.style.backgroundColor="#00bfff";
}
if (event.keyCode == "67"){
document.getElementById("txtInput").value+="c";
btnC.style.backgroundColor="#00bfff";
}
if (event.keyCode == "68"){
document.getElementById("txtInput").value+="d";
btnD.style.backgroundColor="#00bfff";
}
if (event.keyCode == "69"){
document.getElementById("txtInput").value+="e";
btnE.style.backgroundColor="#00bfff";
}
if (event.keyCode == "70"){
document.getElementById("txtInput").value+="f";
btnF.style.backgroundColor="#00bfff";
}
if (event.keyCode == "71"){
document.getElementById("txtInput").value+="g";
btnG.style.backgroundColor="#00bfff";
}
if (event.keyCode == "72"){
document.getElementById("txtInput").value+="h";
btnH.style.backgroundColor="#00bfff";
}
if (event.keyCode == "73"){
document.getElementById("txtInput").value+="i";
btnI.style.backgroundColor="#00bfff";
}
if (event.keyCode == "74"){
document.getElementById("txtInput").value+="j";
btnJ.style.backgroundColor="#00bfff";
}
if (event.keyCode == "75"){
document.getElementById("txtInput").value+="k";
btnK.style.backgroundColor="#00bfff";
}
if (event.keyCode == "76"){
document.getElementById("txtInput").value+="l";
btnL.style.backgroundColor="#00bfff";
}
if (event.keyCode == "77"){
document.getElementById("txtInput").value+="m";
btnM.style.backgroundColor="#00bfff";
}
if (event.keyCode == "78"){
document.getElementById("txtInput").value+="n";
btnN.style.backgroundColor="#00bfff";
}
if (event.keyCode == "79"){
document.getElementById("txtInput").value+="o";
btnO.style.backgroundColor="#00bfff";
}
if (event.keyCode == "80"){
document.getElementById("txtInput").value+="p";
btnP.style.backgroundColor="#00bfff";
}
if (event.keyCode == "81"){
document.getElementById("txtInput").value+="q";
btnQ.style.backgroundColor="#00bfff";
}
if (event.keyCode == "82"){
document.getElementById("txtInput").value+="r";
btnR.style.backgroundColor="#00bfff";
}
if (event.keyCode == "83"){
document.getElementById("txtInput").value+="s";
btnS.style.backgroundColor="#00bfff";
}
if (event.keyCode == "84"){
document.getElementById("txtInput").value+="t";
btnT.style.backgroundColor="#00bfff";
}
if (event.keyCode == "85"){
document.getElementById("txtInput").value+="u";
btnU.style.backgroundColor="#00bfff";
}
if (event.keyCode == "86"){
document.getElementById("txtInput").value+="v";
btnV.style.backgroundColor="#00bfff";
}
if (event.keyCode == "87"){
document.getElementById("txtInput").value+="w";
btnW.style.backgroundColor="#00bfff";
}
if (event.keyCode == "88"){
document.getElementById("txtInput").value+="x";
btnX.style.backgroundColor="#00bfff";
}
if (event.keyCode == "89"){
document.getElementById("txtInput").value+="y";
btnY.style.backgroundColor="#00bfff";
}
if (event.keyCode == "90"){
document.getElementById("txtInput").value+="z";
btnZ.style.backgroundColor="#00bfff";
}
document.onkeypress = function(event){
event = event || window.event;
var key = event.keyCode;
alert(String.fromCharCode(key));
}