我创建了一个示例应用程序,它检查何时按下按键或鼠标,但问题是当按下鼠标或按键时,它会打印控制台“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
=> 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;
}
});
})();
关于javascript - JavaScript 中的 bool 标志未正确检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23822228/