2017-04-15 71 views
0

所以我有一个div,它有一个EventListener它工作正常。但我希望EventListener只能在某些点被触发,这就是为什么我添加了if语句的原因。addEventListener无法正常工作

我的印象是,你可以从我的代码下面的方式更改函数的全局变量,但这似乎并没有工作。我试图通过window.clickDisable = false;更改函数内的变量,但这也不起作用。代码的相关部分如下,有人知道为什么这不起作用吗?谢谢。

var clickDisable = true; 

if (clickDisable == false) { 
    document.getElementById("fight") 
    var fightMenu = fight.addEventListener("click", fightMenuFunction) 
} 

function fightMenuFunction() { 

} 

setTimeout(introAnimation, 7000) 
    function introAnimation() { 
    clickDisable = false; 
} 
+0

你'clickDisable'变量停止添加事件侦听器,一个更好的地方可能是它添加事件侦听器 – Icepickle

+0

代码永远不会被再次调用里面。您应该在7秒后添加eventListener。在这个例子中战斗也没有定义。 – dejakob

+1

你可以像这样改变全局变量,但是如果以前为false的语句不会再次用新值重新运行。 – JJJ

回答

2

有与你的代码的问题了一把: 我认为最好的办法是把函数体中的if语句。只有当计时器已经过去时,才希望函数的主体运行,而不是仅在计时器过去时才绑定事件。

此外,您的document.getElementById没有被使用。相反,您可以从元素ID自动解释为全局变量的事实中受益,您可以这样做,正如我在下面所做的那样,但可能不是最佳做法。

var clickDisable = true; 
 

 
function fightMenuFunction() { 
 
    if(!clickDisable){ 
 
    console.log('This is the function running.') 
 
    } 
 
} 
 
fight.addEventListener("click", fightMenuFunction) 
 

 

 
window.setTimeout(introAnimation, 7000) 
 
    function introAnimation() { 
 
    clickDisable = false; 
 
}
<button id="fight">Fight</button>