CTRL + C и ключевое слово C, оба события работают одновременно JavaScript || Jquery - PullRequest
1 голос
/ 12 апреля 2020

Когда я создаю ярлык для ключевого слова на моем сайте, например, нажимая клавишу C, он перенаправляет меня на любую нужную мне страницу.

Но возникает проблема, когда я нажимаю Ctrl + C комбинация, она копирует текст для меня, но также перенаправляет меня на другую страницу.

Я попытался создать небольшую демонстрацию:

 document.onkeyup = function(e) {
     var e = e || window.event; 
    if ((e.which == 67)) {
        alert("C key is pressed");
    }else if ((e.ctrlKey) && (e.which == 67)) {
        alert("Text Copied");
    } 
};
body {
  background-color: #fff;
}
h5{
  text-align:center;
  font-size:20px;
  font-weigt:bold;
}
<h5>Creating Shortcut for Website</h5>
<p>By clicking on <q>C</q> key on Keyboard, your page will reload</p>

Надеюсь, вы поймете.

Спасибо за ваше участие.

1 Ответ

0 голосов
/ 12 апреля 2020

Измените свой код так, чтобы проверка на Ctrl + C проходила перед проверкой ключа перенаправления.

Также обратите внимание, что KeyboardEvent#which устарела, поэтому вам следует использовать KeyboardEvent#key вместо:

document.onkeyup = function(e) {
    e = e || window.event; 
    if (e.ctrlKey && e.key === 'c') {
        alert("Text copied");
    }else if (e.key === 'c') {
        alert("C key is pressed");
    }
};
body {
  background-color: #fff;
}
h5{
  text-align:center;
  font-size:20px;
  font-weigt:bold;
}
<h5>Creating Shortcut for Website</h5>
<p>By clicking on <q>C</q> key on Keyboard, your page will reload</p>

Однако это не всегда будет работать.

Если вы выполните следующее:

Ctrl down
C down
C up
Ctrl up

... тогда это будет работать, но если последовательность (которая также инициирует операцию копирования):

Ctrl down
C down
Ctrl up
C up

... тогда не будет.

Почему?

Проблема в самом событии keyup. Поскольку объект события представляет состояние клавиатуры в момент его выдачи, keyup проверяет наличие клавиш-модификаторов , когда C равен , выпущен .

Однако, поскольку клавиши-модификаторы обычно нужно нажимать до клавиши, которую они модифицируют, проверки должны выполняться в тот момент, когда клавиши нажимаются .

Итак, вместо этого вам придется использовать событие keydown:

document.onkeydown = function(e) {
    e = e || window.event; 
    if (e.ctrlKey && e.key === 'c') {
        alert("Text copied");
    }else if (e.key === 'c') {
        alert("C key is pressed");
    }
};
body {
  background-color: #fff;
}
h5{
  text-align:center;
  font-size:20px;
  font-weigt:bold;
}
<h5>Creating Shortcut for Website</h5>
<p>By clicking on <q>C</q> key on Keyboard, your page will reload</p>
...