2017-04-15 69 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>