я создал образец приложения, которое проверяет, когда я нажимаю клавишу или мышь, но проблема заключается в том, когда мышь или когда нажата клавиша, она печатает консоль "Ввод нажата" и "Ввод не нажимается, какое-то событие мыши нажимается", что логическая проверка не работает должным образом, я так думаю,
может кто-нибудь скажет мне какое-то решение
$('#adminPanel').bind("searchMaster", function(event, data)
{
var press = true;
$(this).keypress(function(e) {
var code = e.keyCode ? e.keyCode : e.which;
if (code == 13)
{
console.log("Enter is pressed");
press = false;
}
});
if(press)
{
console.log("Enter is not pressed, some Mouse event is clicked");
// some other action to be triggered if key is not pressed
}
});
Проблема заключается в том, что (a) вы регистрируете событие нажатия клавиши в обратном вызове клика и (b), которое вы установили, press
на значение " false
, если оно нажато, и (c), что вы никогда не перезапускаете значение press
каждый раз, когда вы нажимаете мышью,
Я предлагаю вам разделить эти две функции обратного вызова и перемещение press
вне обратных вызовов. В примере press
=> enterPressed
. enterPressed
и обратные вызовы завернуты в IIFE, чтобы не проголосовать за глобальное пространство имен.
(function () {
// by default, "enter" is not pressed
var enterPressed = false;
// Suppose this event is triggered by mouse clicks
$("#adminPanel").bind("searchMaster", function (event, data) {
if (!enterPressed) {
// Handle Mouse Click (no "enter" pressed here)
}
});
// This callback will be triggered if you press a key
// and if you release a key
$("#adminPanel").on("keydown keyup", function (e) {
var code = e.keyCode ? e.keyCode : e.which;
// check if the pressed/released key was "enter"
if (code === 13) {
enterPressed = !enterPressed;
}
});
})();
searchMaster
?searchMaster
является его частью