javascript中的布尔标志没有正确检查

boolean flag in javascript is not checking properly

本文关键字:检查 标志 布尔 javascript      更新时间:2023-09-26

我创建了一个示例应用程序,当我按下键或鼠标时检查,但问题是当鼠标或当键被按下时,它打印控制台"按下Enter""未按下某些鼠标事件被单击",布尔检查不能正常工作,我认为是这样,

谁能告诉我一些解决办法

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