Почему jQuery keyup не работает, когда я пытаюсь создать сочетание клавиш на своем веб-сайте? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь создать сочетания клавиш для доступности на моем веб-сайте.Например, когда пользователь нажимает «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.

Ответы [ 5 ]

0 голосов
/ 14 февраля 2019

Если вы хотите, чтобы прийти в голову:

$(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>
0 голосов
/ 14 февраля 2019

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';
        }
    });
});
0 голосов
/ 14 февраля 2019

Вы используете неправильные коды клавиш.См. это

$(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>
0 голосов
/ 14 февраля 2019

Вы можете получить ключевой символ по 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';
        }
      });
    });
0 голосов
/ 14 февраля 2019

Это потому, что код клавиши для '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>
...