【问题标题】:How do I get key values in HTML/Javascript如何获取 HTML/Javascript 中的键值
【发布时间】:2013-08-07 22:01:40
【问题描述】:

好的,所以我了解如何在使用输入字段时获取键值...但是我正在讨论在您的浏览器未聚焦在任何文本框或文本区域时按下的键值。

我正在尝试制作一个具有 0、1、2、.. 9 按钮的屏幕键盘...但是我希望用户能够使用键盘上的键按下这些按钮。

我在一些网站上看到过这样做,如果您在主页上按 S 键,它会带您进入登录屏幕。 Facebook 也使用 L 键来点赞照片。

所以问题是:当光标没有聚焦时,如何在 javascript 中获取键值。

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    如果您使用的是 JQuery,您只需将事件处理程序添加到文档中...

    $(document).keypress(function(event) {
          alert('Handler for .keypress() called. - ' + event.which);
    });
    

    (来自http://forum.jquery.com/topic/how-to-catch-keypress-on-body

    编辑 zzzzBov 的评论...

    来自 JQuery KeyPress 文档:

    要确定输入了哪个字符,请检查事件对象 传递给处理函数。虽然浏览器使用不同 属性来存储这些信息,jQuery 规范化 .which 属性,以便您可以可靠地使用它来检索字符代码。

    【讨论】:

    • event.which 可能是更好的选择
    【解决方案2】:

    你需要使用 window.onkeydown 然后检查你感兴趣的键。

    https://developer.mozilla.org/en-US/docs/Web/API/window.onkeydown

    【讨论】:

      【解决方案3】:

      您应该监听按键事件。

      document.onkeypress = function(evt) {
          evt = evt || window.event;
          var charCode = evt.which || evt.keyCode;
          alert("Character typed: " + String.fromCharCode(charCode));
      };
      

      更多信息看这里Link

      【讨论】:

        【解决方案4】:

        您需要在窗口中添加一个事件监听器。然后在事件处理程序中,您从传入的事件中获取keyCode 属性。键码是半任意的,因为它们不会直接映射到您的想法,因此您必须使用表格(google 上的第一个结果:http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes)来识别您关心的键码。

        window.addEventListener('keypress',function (evt) {
           switch (evt.keyCode) {
               case 48:
                   zeroKeyPressed(); break;
               case 49:
                   oneKeyPressed(); break;
               ...
           }
        }, false);
        

        【讨论】:

          【解决方案5】:

          您将使用按键事件。

          以下是您的使用示例:

          window.addEventListener('keypress', function (event) {
          
              var key_code, key;
          
              event = event || window.event; // IE
          
              key_code = event.charCode || event.keyCode || event.which || 0;
              key = String.fromCharCode(key_code);
          
              // prevent keys 0-9 from doing what they normally would do
              if (key_code >= 48 && <= 57) {
                  event.preventDefault();
                  alert('The user pressed ' + key);
              }
          
          }, false);
          

          【讨论】:

            【解决方案6】:

            使用纯js,你可以在你的layout.htmlcs中使用这个,开头:

              @{
            
                    <script>
                        sessionStorage.setItem("ProductionHostURL", '@System.Configuration.ConfigurationManager.AppSettings["ProductionHostURL"]');
                    </script>
            
            }
            <!DOCTYPE html>
            

            然后在你的layout.htmlcs主js文件中,你可以使用这样的方法:

            var urlBaseProduction;
            var urlBaseDevelopment;
            
                $(document).ready(function () {
                  configureHostEnvironment()
                 ....
                }
            

            在该方法中,配置要在生产和开发中使用的变量,如下所示:

            function configureHostEnvironment(){
            
                HOST = sessionStorage.getItem("ProductionHostURL")
                if (HOST.length <= 0) {
                    alert("Host not configured correctly")
                } else {
                    urlBaseProduction= host + '/api/';
                    urlBaseDevelopment= host + port + '/api/';
                }
            }
            

            如果您对此方法有任何建议或改进,请发表评论。

            【讨论】:

            • 请不要对多个问题发布相同的答案(123)。发布一个好的答案,然后投票/标记以关闭其他问题作为重复问题。如果问题不是重复的,调整您对该问题的回答。
            猜你喜欢
            • 1970-01-01
            • 2021-12-30
            • 1970-01-01
            • 1970-01-01
            • 2018-04-18
            • 2013-09-25
            • 1970-01-01
            • 1970-01-01
            • 2016-10-25
            相关资源
            最近更新 更多