Javascript 如果函数在布尔值更改后未触发?

Javascript 如果函数在布尔值更改后未触发?,javascript,if-statement,boolean,Javascript,If Statement,Boolean,我有一个系统,一旦按下某个键,一个布尔值变为true,程序就会触发一个if循环。但是,一旦按下该键,程序将“锁定”且无响应。(程序应该自动移动拨片,整个程序应该可以关闭,但看起来好像根本没有激活。 以下是违规代码: var aienable = false; $(document).keydown(function(keyPressed){ if (keyPressed.keyCode == 192 && aienable == false){ aiena

我有一个系统,一旦按下某个键,一个布尔值变为true,程序就会触发一个if循环。但是,一旦按下该键,程序将“锁定”且无响应。(程序应该自动移动拨片,整个程序应该可以关闭,但看起来好像根本没有激活。 以下是违规代码:

var aienable = false;
$(document).keydown(function(keyPressed){
    if (keyPressed.keyCode == 192 && aienable == false){
        aienable = true;
    }
});
if (aienable == true){
    var AIdrive = setInterval(function(){
        $(document).keydown(function(keyPressed){
            if (keyPressed.keyCode == 192 && aienable == true){
                aienable = false;
            }
        });
        if (aienable == false){
            clearInterval(AIdrive);
        }
    },1000);
}
注意:代码中使用的键是`

if(aienable==true){

仅在之后执行一次

var aienable=false;

条件总是错误的。 按键时执行
aienable
更改值


第二个
if
应该在第一个
if

之后的keydown事件处理程序中。您必须将布尔条件代码放入一个函数中,并从keydown处理程序中调用它。按键后变量的值为true,但不会通知代码,因为它已经运行。

if
语句需要在事件处理程序中。否则,当第一次解释该代码块时,它将只运行一次。同时添加一个新的“keydown”间隔计时器回调中的处理程序将是一场灾难。添加新处理程序时,不会删除以前添加的处理程序。如果是游戏,并且您有一个由
setInterval()设置的函数
fn
若要更改对象的位置,则您的按键处理程序只需更改一些变量,让拨片向左或向右移动。否则,如果只是按下一个键并开始某项操作,则您的按键可以调用
setInterval()
来执行某项操作。这取决于您想要执行的操作