Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript键盘,shift+;组合键_Javascript_Keyboard - Fatal编程技术网

Javascript键盘,shift+;组合键

Javascript键盘,shift+;组合键,javascript,keyboard,Javascript,Keyboard,我正在用vanilla Javascript创建一个屏幕键盘,当在物理键盘上按相同的键时,我试图更改屏幕键盘键的颜色。到现在为止,一直都还不错。问题是,我使用的是keyup和keydown,但我似乎无法正确使用shift组合 这就是将要发生的事情: 当按下普通键时,颜色变为蓝色 按下shift键时,颜色变为红色 按下shift键+a键时,两个键都将变为红色,释放键时将恢复正常,但如果按住shift键,则其颜色将变为红色 问题:当按下shift键+普通键时,如果我松开普通键,即使shift键仍

我正在用vanilla Javascript创建一个屏幕键盘,当在物理键盘上按相同的键时,我试图更改屏幕键盘键的颜色。到现在为止,一直都还不错。问题是,我使用的是keyup和keydown,但我似乎无法正确使用shift组合

这就是将要发生的事情:

  • 当按下普通键时,颜色变为蓝色
  • 按下shift键时,颜色变为红色
  • 按下shift键+a键时,两个键都将变为红色,释放键时将恢复正常,但如果按住shift键,则其颜色将变为红色
问题:当按下shift键+普通键时,如果我松开普通键,即使shift键仍被按下,两个按钮上的颜色也会消失

这是我目前的代码:

farge1 = ' key-pressed';
farge2 = ' shift-pressed';
shift = false;




var klikk = function(e) {
e = e || window.event;
var k = e.keyCode || e.which;

if (k === 13) {
    document.getElementById('enter').className += (farge1);
} else if (k === 8) {
    document.getElementById('backspace').className += (farge1);
} else if (k === 16) {
    document.getElementById('shift-right').className += (farge2);
    document.getElementById('shift-left').className += (farge2);
    shift = true;
}

};

var bokstav = function(e) {
e = e || window.event;
var b = String.fromCharCode(e.which).toLowerCase();

if (shift === true) {
    document.getElementById(b).className += (farge2);
} else {
    document.getElementById(b).className += (farge1);
}
};


var slipp = function(e) {
e = e || window.event;
var k = e.keyCode || e.which;
var b = String.fromCharCode(e.which).toLowerCase();

document.getElementById('enter').className = ("");
document.getElementById('backspace').className = ("");

document.getElementById(b).className = ("");
if (k !== 16) {
    document.getElementById('shift-left').className = ("");
    document.getElementById('shift-right').className = ("");
}
shift = false;

};


document.onkeypress = bokstav;
document.onkeydown = klikk;
document.onkeyup = slipp;

我对这个完全不熟悉。。没有jQuery pls

您的代码中有一个错误,这是由按键事件引起的。只要按住shift键,事件就会持续触发。但是,
String.fromCharCode(e.which)
将始终为Shift返回一个空字符串,该字符串不是可打印字符。您需要向按键事件添加逻辑以处理移位:

var bokstav = function(e) {
    e = e || window.event;
    var b = String.fromCharCode(e.which).toLowerCase();

    if (b) { // make sure b has a value
        if (shift === true) {
            document.getElementById(b).className += (farge2);
        } else {
            document.getElementById(b).className += (farge1);
        }
    }
};
要防止在正常的键控模式下换档,请执行以下操作:

document.getElementById(b).className = ("");
if (k === 16) {
    document.getElementById('shift-left').className = ("");
    document.getElementById('shift-right').className = ("");
    shift = false;
} 

这是一本书。这只适用于“a”或“shift”+“a”按键。

Thx,但我认为问题出在按键上,在释放正常按键时,shift颜色消失。。由于我缺乏语法,我无法理解逻辑-skills@HåvardBrynjulfsen这是因为您正在检查密钥!==16您应该只将shift颜色更改回===16。