【问题标题】:Javascript keypress event and e.keycodeJavascript按键事件和e.keycode
【发布时间】:2015-04-11 10:38:05
【问题描述】:
  1. 我有一个代码,当用户输入text input 时,它会更新剩余字符数。代码使用keypress 事件触发。问题是代码仅在 2 keypress 之后触发。为什么会这样?

  2. 我有一个代码来显示 ASCII 代码的键,但字符总是显示 8 并在我按 退格 时显示.以及如何使用String.fromCharCode(event.keycode} ;方法。

  3. 为什么将 event 参数添加到 function 中? e.keycode 如何知道它正在显示 用户的 输入的 keycode

代码示例

HTML

<div id="page">
  <h1>List King</h1>
  <form id="messageForm">
    <h2>My profile</h2>
    <textarea id="message"></textarea>
    <div id="charactersLeft">180 characters</div>
    <div id="lastKey"></div>
  </form>
</div>

JavaScript

var el;                                                    // Declare variables

function charCount(e) {                                    // Declare function
  var textEntered, charDisplay, counter, lastkey;          // Declare variables
  textEntered = document.getElementById('message').value;  // User's text
  charDisplay = document.getElementById('charactersLeft'); // Counter element
  counter = (180 - (textEntered.length));                  // Num of chars left
  charDisplay.textContent = counter;                       // Show chars left

  lastkey = document.getElementById('lastKey');            // Get last key used
  lastkey.textContent = 'Last key in ASCII code: ' + e.keyCode; // Create msg 
}

el = document.getElementById('message');                   // Get msg element
el.addEventListener('keypress', charCount, false);         // keypress -call charCount()

【问题讨论】:

    标签: javascript html dom-events keypress keycode


    【解决方案1】:
    1. keypress 事件在输入值更新之前触发,这就是计数器不是最新的原因。如果您不需要 keyCode,我建议您收听 input 事件。你也可以听keyup(但更新不会直接)或keypresskeyup的组合(来自“How to get text of an input text box during onKeyPress?”,我更新了正确答案fiddle)。李>
      • 实际上,按下退格键时似乎不会触发keypress 事件。话虽如此,忽略“静音”键(“退格”、“移位”、“命令”等)的另一种解决方案是监听“输入”事件(但您将无法访问 event.keyCode )。否则,当 keyCode 不相关时,您也可以忽略您的代码。
      • 关于String.fromCharCode,只需使用String.fromCharCode(event.keyCode) 即可获得keyCode 的“人类”等效项。
    2. 传递给函数的event 是一个对象,其中包含有关此给定事件的所有信息,包括按下的键。

    【讨论】:

    • 第一个问题不是问题,它适用于keyup 你有特殊原因吗?不要说它来自其他地方,在你的代码中显示它。@gabin
    • 我将您的代码复制并粘贴到 jsfiddle 中。打开你的控制台并输入输入。如您所见,每次按键都会触发keypress
    • 我输入了一个它不会触发的字符,而我输入的下一个字符会触发它。从某种意义上说,我输入了一个字符,接下来什么也没有发生,我输入另一个字符(所以我输入了 2 个字符)之后输入我的第二个字符事件触发并显示(180-1character)179个字符而不是178个字符。
    • 实际上keypress事件在输入值更新之前触发。如果您不需要 keyCode,我建议您收听“输入”事件。否则,您可以收听“keyup”,但更新不会“直截了当”。 “How to get text of an input text box during onKeyPress?”还有其他解决方案(我已根据您的需要更新了the fiddle)。
    • jsfiddle.net/mpp522L5/ssss ASCII 码不更新为字母请说出有什么问题
    【解决方案2】:

    1) 使用“keyup”代替“keypress”。

    2) lastkey.textContent = 'ASCII码中的最后一个键:' + String.fromCharCode(e.keyCode);

    3) 对此了解不多。添加事件参数以捕获触发的事件。它具有触发事件的所有属性,例如对于“keyup”它具有“charcode”、“keycode”、“key”等。

    【讨论】:

    • 你的回答有效,请回答我的另外两个问题。
    • keyup 在您松开按键时触发,因此在您按下时计数器不会更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2012-10-23
    相关资源
    最近更新 更多