【问题标题】:Why jQuery keyup is not working while I try to build keyboard shortcut on my website?当我尝试在我的网站上构建键盘快捷键时,为什么 jQuery keyup 不起作用?
【发布时间】:2019-07-08 11:58:00
【问题描述】:

我正在尝试为我的网站构建可访问性的键盘快捷键。例如,当用户按下“1”时,我想将他移到家中。当用户按“2”时,转到不同的页面。

我正在尝试为此使用 keyup,但它不起作用。

$(function() {
  $(document).keyup(function(e) {
    if (e.which == 1) {
      console.log('1');
      window.location.href = '/';
    } else if (e.which == 2) {
      window.location.href = '/escolas';
    } else if (e.which == 3) {
      window.location.href = '/noticias';
    } else if (e.which == 4) {
      window.location.href = '/eventos';
    } else if (e.which == 5) {
      window.location.href = '/contato';
    }
  });
});

有人可以帮助我吗?当我按“1”时,它没有记录 1。

【问题讨论】:

标签: javascript jquery accessibility keyboard-shortcuts


【解决方案1】:

这是因为“1”的键码不是 1 而是 49(或者小键盘上的键码是 97)。

选中此项以查看您的密钥代码:

$(function() {
  $(document).keyup(function(e) {
    $('body').text(e.type + ' ' + e.which);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【讨论】:

    【解决方案2】:

    您使用了错误的键码。参考this

    $(function() {
      $(document).keyup(function(e) {
        if (e.which == 49) {
          console.log('1');
          window.location.href = '/';
        } else if (e.which == 50) {
          window.location.href = '/escolas';
        } else if (e.which == 51) {
          window.location.href = '/noticias';
        } else if (e.which == 52) {
          window.location.href = '/eventos';
        } else if (e.which == 53) {
          window.location.href = '/contato';
        }
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    【讨论】:

      【解决方案3】:

      您可以通过String.fromCharCode(event.which);获取关键字符,然后直接与实际字符进行比较:

       $(function() {
            $(document).keyup(function(e) {
              if (e.key) {
                 var key = e.key;
               } else { 
                 var key  = String.fromCharCode(e.which || e.keyCode);
               }
              if (key == 1) {
                console.log('1');
                window.location.href = '/';
              } else if (key == 2) {
                window.location.href = '/escolas';
              } else if (key == 3) {
                window.location.href = '/noticias';
              } else if (key == 4) {
                window.location.href = '/eventos';
              } else if (key == 5) {
                window.location.href = '/contato';
              }
            });
          });
      

      【讨论】:

      • 请记住,如果用户使用小键盘按下这些数字中的任何一个,这将不起作用。
      • @CristianoSoares,谢谢你的意见,现在它也适用于小键盘。
      【解决方案4】:

      e.which 为您提供 ASCII 值。要将 ASCII 转换为字符,请使用 String.fromCharCode(e.which)

      $(function () {
          $(document).keyup(function (e) {            
              if (String.fromCharCode(e.which) == 1) {
                  window.location.href = '/';
              } else if (String.fromCharCode(e.which) == 2) {
                  window.location.href = '/escolas';
              } else if (String.fromCharCode(e.which) == 3) {
                  window.location.href = '/noticias';
              } else if (String.fromCharCode(e.which) == 4) {
                  window.location.href = '/eventos';
              } else if (String.fromCharCode(e.which) == 5) {
                  window.location.href = '/contato';
              }
          });
      });
      

      【讨论】:

        【解决方案5】:

        如果你想花哨:

        $(document).ready(function() {
            'use strict';
          
            const addresses = [
              {
                codes: [49, 97],
                path: '/'
              },
              {
                codes: [50, 98],
                path: '/escolas'
              },
              {
                codes: [51, 99],
                path: '/noticias'
              },
              {
                codes: [52, 100],
                path: '/eventos'
              },
              {
                codes: [52, 101],
                path: '/contato'
              }
            ]
            $(document).on("keyup", evt => {
              const key =  evt.which;
              addresses.map(address => {
                if(address.codes.filter(code => code === key).length)
                  window.location.href = address.path;
              })
          });
        })
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-06
          • 1970-01-01
          • 1970-01-01
          • 2013-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多