2016-08-23 101 views
1

我有一個按鈕,當點擊時我想在兩個不同的功能之間切換。像第一次點擊會調用函數A,第二次點擊將調用函數B,第三次點擊將調用函數A等如何在單擊按鈕上的功能之間切換

爲HTML我有這樣的事情:

<input type="image"onclick="test()"> 

爲JavaScript我:

<script> 
val = 1; 
function test() { 

    if (val = 1) { 
    function1(); 
} 
    else { 
    function2();} 
} 
</script> 

<script> 
function function1() { 
alert("1"); 
val = 2;} 
</script> 

<script> 
function function2() { 
alert("2"); 
val = 1;} 
</script> 

它只運行function1即使我設置val = 2它將運行function1。任何想法,我做錯了什麼?

+0

看代碼的比較操作始終分配值1。比較應該有一個==而不是單一的=。如果val == 1 – Craig

回答

2

您正在使用賦值運算符來檢查值。使用平等操盤手:

<script> 
val = 1; 
function test() { 
    if (val == 1) { // compare values using == (or maybe ===) 
     function1(); 
     val = 2;  // use the assignment operator here 
    } 
    else { 
     function2(); 
     val = 1; 
    } 
} 
</script> 

更新:

由於@nnnnnn指出的那樣,你可能要更新內部test()直接將切換狀態。

+0

在'test()'內部而不是在'function1()'和'function2()'內更新'val'也會更有意義 - 保留所有控制邏輯一個地方。 (即使只有這兩個函數也很簡單,如果稍後需要添加'function3()'等,則更簡單。)(對不起,刪除並重新發布我的評論。) – nnnnnn

1

如果您只需要切換按鈕,您可以嘗試XOR風格功能。

<script> 
    val = 0; 
    function toggle(){ 
     val = val^1; // XOR 0^1 => 1, 1^1 => 0 
     if(val == 0){ 
      //do something 
     }else{ 
      //do something else 
     } 
    } 
</script> 

或者更短的方式

<script> 
    val = 0; 
    function toggle(){ 
     val = val^1; // XOR 0^1 => 1, 1^1 => 0 
     val == 0 ? function1(): function2(); 
    } 
</script> 
+0

現在就工作。我會檢查你的建議。我相信有更好的方法來做我想做的每件事,幾乎沒有JavaScript哈哈的經驗。感謝大家的幫助! –

+0

但是,讓我問你,如果在toggle()運行之前,val的值爲1或0,爲什麼是val = val^1;需要?它不會以同樣的方式運作嗎? –

+0

頂部「val」是總值爲0的整體值。然後「val^1」表示始終爲「0^1」。因此,在將「val」數字從0切換到1並分配給「val」全局變量之後。然後您的瀏覽器記得下次更改「val」值。 第一次點擊後,全局「val」爲1,「val^1」爲「1^1」 –