2017-04-16 75 views
0

這可能以前已經涵蓋過,但我在網上看到的內容很混亂,或者至少對於像我這樣的初學者來說太高級了。這裏有一個例子......在Javascript中,除非第一個函數被調用,否則我該如何防止第二個函數運行?

var funcA = function() { 
    alert("Button A has been pressed"); 
}; 
var funcB = function() { 
    if (funcA === false){ 
    alert("press Button A"); 
    } 
    else{ 
    alert("Button B has been pressed"); 
    } 
}; 

var buttonA = document.getElementById('button1'); 
buttonA.onclick = funcA; 
var buttonB = document.getElementById('button2'); 
buttonB.onclick = funcB; 

如果我按任何順序點擊按鈕A或按鈕B,他們的工作;但我不想按鈕B工作,除非按鈕A先被點擊。通過我現在的代碼,funcB中的if語句永遠不會運行,但else語句始終運行。

+0

只是使用布爾標誌... –

回答

1

當您運行功能答:我可能會創建一個變量,將有效地爲你打一個開關的功能:

var funcAPressed = false; 
 

 
var funcA = function() { 
 
    alert("Button A has been pressed"); 
 
    funcAPressed = true; 
 
}; 
 
var funcB = function() { 
 
    if (funcAPressed === false){ 
 
    alert("press Button A"); 
 
    } 
 
    else{ 
 
    alert("Button B has been pressed"); 
 
    } 
 
}; 
 

 
var buttonA = document.getElementById('button1'); 
 
buttonA.onclick = funcA; 
 
var buttonB = document.getElementById('button2'); 
 
buttonB.onclick = funcB;

+0

我結束了去與這個建議。我基本上說,var funcAPressed = false。除非另有聲明,否則將如何。當funcA運行時,它現在聲明funcAPressed爲true。 如果funcAPressed爲false,這是默認情況下,funcB中的if語句將運行。但是如果函數funcA成爲true,在調用funcA之後發生,func B中的else語句將運行。 – 00Saad

1

以下if聲明絕不會運行中的代碼塊因爲funcA不是布爾值,所以它是一個沒有返回值的函數。

if (funcA === false){ 
    alert("press Button A"); 
} 

但是你可以做的是剛剛宣佈,作爲標誌一個布爾值,像這樣:

(function() { 
 

 
    let called = false; 
 

 
    var funcA = function() { 
 
    called = true; 
 
    alert("Button A has been pressed"); 
 
    }; 
 
    var funcB = function() { 
 
    if (!called) { 
 
     alert("press Button A"); 
 
    } else { 
 
     alert("Button B has been pressed"); 
 
    } 
 
    }; 
 

 
    var buttonA = document.getElementById('button1'); 
 
    buttonA.onclick = funcA; 
 
    var buttonB = document.getElementById('button2'); 
 
    buttonB.onclick = funcB; 
 

 
})();
<button id="button1">button 1</button> 
 
<button id="button2">button 2</button>

0

只要改變按鈕的點擊處理程序按鈕B的行爲 - 答:

document.getElementById('a').onclick =() => { 
 
    alert("Button A has been pressed"); 
 
    document.getElementById('b').onclick =() => {alert("Button B has been pressed") }; 
 
}  
 
document.getElementById('b').onclick =() => { alert("press Button A") };
<button id="a">a</button> 
 
<button id="b">b</button>

0

這可能是骯髒的,但可以正常工作`

var count = 0; 
 
function funcA(){ 
 
count = 1; 
 
} 
 
function funcB(){ 
 
if(count == 1){ 
 
alert("OKAy!") 
 
}else{ 
 
alert("Press Button A"); 
 
} 
 
}
<button id="a" onclick="funcA();">A</button> 
 
<button id= "b" onclick="funcB();">B</button>

`

0

我想你已經得到了答案,但我想補充的是,當你這樣做:

var funcA = function() { 
    alert("Button A has been pressed"); 
} 

然後檢查:

if (funcA === false){ 
    alert("press Button A"); 
} 

然後funcA不會是錯誤的。原因是你已經爲funcA變量賦了一個函數對象,因此它是真的。它並不代表按鈕1已被按下的事實。 Javascript與其他古典語言不同,因此可以將javascript函數分配給一個變量。希望它能幫助你更好地學習語言!

+0

我不打算把這個答案投下來,但你能解釋一下這個答案寫的地址的問題嗎?根據我自己的閱讀,OP只在'funcA()'被調用並運行之後纔想調用/啓用'funcB()',這個回答似乎沒有解決。 –

+0

我想在這裏解釋的是爲什麼他在他寫的代碼中的期望是錯誤的。希望這有助於他理解問題的根源。 –

+0

我得到你說的,funcA不能是假的,因爲我聲明並將其定義爲一個變量..因此它存在..對吧? 我結束了與傑里米的建議,這是最簡單的,我能理解的東西: 我聲明var funcAPressed = false到全局範圍。 因此,除非另有說明,funcAPressed將始終爲假。但是,當funcA被調用時,funcAPressed = true會發生......這是真的。而funcB中的if語句僅在funcAPressed = false時運行。 我可能會解釋這一切都是錯誤的,但這是我理解並能夠實現的。 – 00Saad

相關問題