[英]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.