javascript - JavaScript 中的 bool 标志未正确检查

标签 javascript jquery

我创建了一个示例应用程序,它检查何时按下按键或鼠标,但问题是当按下鼠标或按键时,它会打印控制台“Enter is pressed”>“未按下 Enter 键,单击了某些鼠标事件”,我认为 bool 检查无法正常工作,

谁能告诉我一些解决方案

$('#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 => enterPressedenterPressed 和回调被包装在 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;
        }
    });
})();

关于javascript - JavaScript 中的 bool 标志未正确检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23822228/

相关文章:

javascript - 搜索与本地存储项相关的数据

javascript - 如何在类型为="text/ng-template"的页面中使用javascript?

jquery - 减少 jQuery 代码行数,避免不必要的重复

javascript - JS setInterval 只执行一次

javascript - 按跨度内容排序 ul 列表

javascript - 如何创建自定义循环?

javascript - 将span的内容添加到div中并使其在按钮单击时可见

javascript - 如何通过过渡更改 div 背景?

javascript - Div 可见性切换不起作用

javascript - 如何查找具有特定类名的类内的控件