【问题标题】:Issue with javascript onkeydown - event.which give characters in upper case onlyjavascript onkeydown 问题 - event.which 仅提供大写字符
【发布时间】:2012-03-28 18:10:49
【问题描述】:

我编写了一段 javascript 代码来获取在文本区域内按下的键。我已经使用 onkeydown 事件来捕获按下的键,并在触发事件时调用一个函数。在函数中,我使用 event.which 来按下按键。但这并没有给出正确的按键。对于按下的任何字符,它会给出相应大写字符的 Ascii 值(仅限 65 到 90)。即使输入了小写字符,它也不会为小写字符提供 Ascii 值,即 97 到 122。例如 - 如果我输入“a”,它会给出“A”的 Ascii 值 有谁知道为什么会这样?这是我正在使用的代码 -

var mainDoc = document.getElementById("mainDoc");
mainDoc.onkeydown = function(event){keyPress(event);}
function keyPress(event)
{
    alert("key code : "+ event.which + " );
}

我尝试使用 onkeypress 事件。这似乎工作正常,但它不捕获 alt、控制、箭头键等。

【问题讨论】:

    标签: javascript onkeydown onkeypress


    【解决方案1】:

    keydownkeyup(大部分情况下)根本不会为您提供字符,而是为您提供键码。 keypress 是您获取字符的地方(如果您需要知道,还有在事件对象的 ctrlKeyaltKeyshiftKey 和 @987654328 上键入该字符时修饰键的状态@ 特性)。 This page 详细介绍了 JavaScript 中的键盘事件的疯狂...

    【讨论】:

    • 非常感谢您的回复。我会检查链接。
    • 细致的文章!如果您不耐烦,请检查结论。
    【解决方案2】:

    问题是keydown 事件将报告 keypresses - 即按下物理键。 keypress 事件将报告 已翻译 键,表示从按下的键中派生的字符 (Shift + a == @ 987654323@)。为了获得实际的键,您可能需要同时跟踪 keydown/keyup(用于监控修饰键)和 keypress(用于监控实际的字母数字用户输入)。

    【讨论】:

    • "为了获取实际的键,您可能需要同时跟踪 keydown/keyup(以监控修饰键)..." 无需自己跟踪修饰键,这就是ctrlKeyaltKeykeypress 事件对象的属性的用途。
    • @T.J.Crowder 我的意思是说“监控单独按下的修饰键”(因为这似乎是 OP 正在寻找的东西) - 你不会为他们收到任何 keypress 事件(猜,以及光标键和其他一些键。)
    • @alexander:啊,好吧,我现在明白你的意思了。
    【解决方案3】:

    来自http://www.bloggingdeveloper.com/post/KeyPress-KeyDown-KeyUp-The-Difference-Between-Javascript-Key-Events.aspx

    为了理解keydown和keypress之间的区别,它 有助于理解“字符”和“字符”之间的区别 “钥匙”。 “键”是计算机键盘上的物理按钮,而 “字符”是通过按下按钮键入的符号。理论上, keydown 和 keyup 事件表示按键被按下或释放, 而 keypress 事件表示正在键入的字符。这 理论的实现在所有浏览器中并不相同。

    【讨论】:

      【解决方案4】:
      function getKeyCode(event) {
         event = event || window.event;
         return event.keyCode;
      }
      

      使用 event.keyCode 会给你 keycode ;)

      g.r.

      【讨论】:

      • 不区分大小写字母。
      猜你喜欢
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多