繁体   English   中英

javascript中的boolean标志未正确检查

[英]boolean flag in javascript is not checking properly

我创建了一个示例应用程序,该应用程序检查何时按下键或鼠标,但是问题是当鼠标或按下键时,它会打印控制台“按下Enter”“未按下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)您在click回调中注册了keypress事件,(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;
        }
    });
})();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM