Используя Jquery, почему эта функция вызывается, когда я нажимаю только один из двух клавиш?

У меня есть этот код:

$(document).bind('keydown', 'ctrl+1', function () {
    alert('You found the hotkey ctrl+1!');
});

но если я нажму кнопку EITHER Control или 1, этот код, похоже, срабатывает. Я хочу, чтобы этот код срабатывал только при нажатии BOTH.

Может ли кто-нибудь уточнить, что мне не хватает?

Ответы

Ответ 1

Как вы можете видеть в документации, второй аргумент функции bind - eventData, который

Объект, содержащий данные, которые будут переданы обработчику событий.

Это используется для доступа к переменным извне внутренней функции, которую вы используете в качестве обработчика, чтобы избежать проблемы с доступом к изменяемым переменным из закрытия.

Если вы хотите отфильтровать клавиши, которые запускают действие, просто обрабатывают его внутри функции.

$(document).bind("keydown", function(ev){ // notice the function argument
    if(ev.ctrlKey && ev.keyCode == 49){ // 49 being the keyCode for "1"
        alert("Foo!");
    }
});

Ответ 2

document.body.addEventListener('keypress', function (event) {
    var key = event.which || event.keyCode; 
    if(key.ctrlKey && key == 49){
      alert("Ctrl+1 pressed);
    }
}

Это должно помочь. Вы добавляете прослушиватель событий в Тело вашего HTML-кода и слушаете, какая клавиша была нажата.

$(document).ready(function () {
  document.body.addEventListener('keypress', function (event) {
    var key = event.which || event.keyCode;
    if (key.ctrlKey || key == 49) {
      alert("Ctrl+1 pressed");
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<p>empty page</p>
</body>
</html>

Ответ 3

Сначала извините за мой плохой английский, ключевое слово "+" становится селектором css, не является слушателем для события клавиатуры. (KeyDown, нажатие клавиши, KeyUp)

В этом контексте вам не нужен селектор css для обнаружения ключа, эта магия соответствует событию, поэтому есть функция, которая принимает событие... функция (событие) или function (e), этот параметр содержит все, что вам нужно.

Теперь событие индексирует ключ по свойству , который " или свойство " keyCode ", вот что-то вроде сложного, потому что wich и keycode зависят от браузера поддержка

Теперь, возможно, нужно проверить событие keydown на странице jquery, наблюдать за строкой 41 и результат при нажатии клавиши, особенно код ключа и атрибуты.

Наконец, цель обнаруживает ключ ctrl одновременно с другим ключом, важно знать, что это специальный ключ, и какой номер должен быть заменен на ctrlKey и оценить число с помощью свойства или keyCode.

Ссылка Jquery на keydown и пример, которые заставляют вас знать, какой номер ключа (код или код) вы нажимаете здесь

Ваш код, наконец, понравится

     $(document).bind('keydown', function (e) {
        if((e.crtlKey && (e.which==49)) || (e.crtlKey && (e.which==97))  ){
              alert('You found the hotkey ctrl+1!');
        }
     });

Число 49 в коде соответствует числу = "1" в алфавитной части клавиатуры.

Число 97 соответствует числу = "1" в числовой части клавиатуры

Ответ 4

Непосредственно используйте событие jquery вместо bind. Используйте свойство ctrlKey объекта события, чтобы узнать, нажата ли ctrl.

$(document).keydown("1",function(e){ 
     if(e.ctrlKey)
          alert("Ctrl+1 pressed");
});

Не проверено, но я думаю, он должен работать.

Ответ 5

Вы можете напрямую использовать функцию keydown jQuery и проверять нажатые клавиши.

$('body').keydown(function (e){
    if (e.ctrlKey && e.keyCode == 49)
    alert("Ctrl+1 pressed");
});

Ответ 6

Вам нужно проверить событие keydown, а также нажать ctrl

 $(document).keydown('1',function(e) {
        if (e.ctrlKey) {
            alert('ctrl 1 was pressed.');
        }
    });

Чтобы уточнить ваш вопрос, вы пропустили проверку ctrl-события.

Ответ 7

Используйте JQuery hotKeys. Это сделает вашу жизнь намного проще. Вы сможете сделать что-то вроде:

 $(document).bind('keydown', 'ctrl+1', function () {
    alert('You found the hotkey ctrl+1!');
});

Другая библиотека Ловушка мыши, она позволяет вам делать такие вещи, как:

Mousetrap.bind('command+shift+k', function(e) {
    highlight([6, 7, 8, 9]);
    return false;
});

Ответ 8

Вы делаете это неправильно. Событие "Key down" срабатывает в тот момент, когда вы нажимаете клавишу, и вам все равно, если вы нажимаете другую клавишу. Пожалуйста, используйте событие keyup.

 $(document).bind('keyup', 'ctrl+1', function () {
        alert('You found the hotkey ctrl+1!');
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Ответ 9

Попробуйте следующее:

$(document).keypress("1",function(e) {
  if(e.ctrlKey)
    alert("You found the hotkey ctrl+1!");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<p>Press CTRL+1 to show alert.</p>

Ответ 10

Эта функция будет вызываться при каждом нажатии клавиши, но я проверял наличие кодов клавиш в состоянии. мы можем реализовать требуемую функциональность в "условии". Условие будет выполняться только при нажатии клавиши Ctrl и 1.

$(document).on('keydown', 'body', function(event) {

    if (event.ctrlKey && event.keyCode == 49) {

        alert("Ctrl+1 pressed");
    }

});