javascript - document.onkeydown 键盘输入仅大写

标签 javascript ajax html canvas

我正在尝试构建一个公共(public)墙,对于所有访问该网页的人来说,它看起来都是一样的,并且在用户之间同步。我正在努力正确捕获键盘输入以应用于 Canvas 。我的功能基于document.onkeydown,可以在所述网页引用的“script.js”中看到。当您双击一个单词并写入时,可以看到它正在工作。

不幸的是,这似乎无法捕获除大写字母之外的任何内容,我正在寻找另一种方法来解决这个问题。我研究了“textInput”事件,如 page 中所述。 ,但是它似乎只受 WebKit 浏览器支持,我想构建一些通用的东西。有人可以建议另一种方法来捕获键盘输入以在 Canvas 中使用吗?或者也许我在做一些愚蠢的事情?

描述的代码在这里:

document.onkeydown = keyHandler;
function keyHandler(e)
{

    var pressedKey;
    if (document.all) { e = window.event;
        pressedKey = e.keyCode; }
    if (e.which) {
        pressedKey = e.which;
    }
    if (pressedKey == 8) {
        e.cancelBubble = true; // cancel goto history[-1] in chrome
        e.returnValue = false;
    }
    if (pressedKey == 27)
    {
        // escape key was pressed
        keyCaptureEdit = null;
    }
    if (pressedKey != null && keyCaptureEdit != null)
    {
        keyCaptureEdit.callback(pressedKey);
    }

}
... Later on in code describing each text object ...

keyCaptureEdit.callback = function (keyCode) {
    var keyCaptured = String.fromCharCode(keyCode);
    if (keyCaptured == "\b" ) { //backspace character
        t.attrs.timestamp = t.attrs.timestamp + 1;
        t.setText(t.getText().slice(0, -1));
    }
    else if (keyCode == 32 || keyCode >= 48 && keyCode <= 57 || keyCode >= 65 && keyCode <=  90)
    {
        t.attrs.timestamp = t.attrs.timestamp + 1;
        t.setText(t.getText() + keyCaptured);
    }            
    layer.draw();
}

最佳答案

更改代码的一种简单方法是跟踪 Shift 键:

    ...
    {
        keyCaptureEdit.callback(pressedKey, e.shiftKey); // <-- keep track of shift key
    }

}

...

keyCaptureEdit.callback = function (keyCode, shift) {
    var keyCaptured = String.fromCharCode(keyCode);
    // shift key not pressed? Then it's lowercase
    if (shift === false) keyCaptured = keyCaptured.toLowerCase()

但这并不能解释 CapsLock。

在 jQuery 中,它非常简单,因为正确的关键代码已为您完成:

$(document).keypress(function(event) {
  var keyCaptured = String.fromCharCode(event.keyCode);
  console.log(keyCaptured);
});

在该示例中,控制台将根据键入的内容正确记录 P 或 p。

关于javascript - document.onkeydown 键盘输入仅大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535380/

相关文章:

javascript - 是否可以手动调用对 dom 对象的点击?

javascript - html 解析包含 javascript 的注释

javascript - 即使资源存在,JQuery $.ajax 请求也会返回 "Error 404"

jquery - 如何隐藏(显示:none) parent div when child(img) fails to load?

javascript - 使用提交按钮提交表单时如何将javascript变量发送到php中的另一个页面

javascript - 从 iFrame 中更改 div 内容

JavaScript 检查对象是否具有继承属性

php - Ajax jQuery 数组中的 POST 未定义索引

javascript - 如何将 2D 数组从 JavaScript 传递到 PHP

JavaScript onmouseout 没有正确关闭