логический флаг в JavaScript не проверяется должным образом

0

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

может кто-нибудь скажет мне какое-то решение

$('#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
    }
});
  • 1
    Что именно является вашим событием searchMaster ?
  • 0
    на самом деле мы используем один плагин на основе проекта, и событие searchMaster является его частью
Показать ещё 2 комментария
Теги:

1 ответ

1
Лучший ответ

Проблема заключается в том, что (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;
        }
    });
})();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню