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

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

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

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

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

10 ответов


как вы можете видеть в разделе документация, второй аргумент


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>

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

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

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

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

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

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 " в цифровой клавиатуре часть


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

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

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

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

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


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

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

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


использовать горячие клавиши jQuery . Это сделает вашу жизнь намного проще. Вы сможете сделать что-то вроде:

 $(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;
});

Вы делаете это неправильно. Событие 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>

попробуйте это:

$(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>

Подробнее здесь.


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

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

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

        alert("Ctrl+1 pressed");
    }

});