2012-10-30 60 views
1

我想讓我的'esc'鍵根據當前情況做不同的事情。例如,我有一個顯示工具欄的按鈕,我想'esc'鍵隱藏它,但我也希望'esc'鍵打開一個框來關閉當前頁面,並且如果按'esc'鍵,它應該隱藏關閉框。帶有if/else語句的ESCAPE鍵 - jQuery

我認爲這將是這樣的,但它只打開關閉框。當我再次輸入'esc'時它不會關閉它,當它顯示時它也不會隱藏工具箱。它只是打開頂部的關閉框。

function esc_key_command() { 
    if (toolboxIsShown) { 
     $('.tool_box').hide(); 
     var toolboxIsShown = false; 
    } else if (CloserIsShown) { 
     $('.closer').stop().fadeOut(200); 
     var CloserIsShown = false; 
    } else { 
     $('.closer').stop().fadeIn(200); 
     var CloserIsShown = true; 
    } 
} 

我知道它與調用'esc'鍵無關,因爲它至少在鍵入鍵時返回一些內容。

回答

3

var聲明是問題所在。變量的範圍是本地的,所以每次調用函數時,它們都是重置

如果你想用變量來做,你需要讓它們設置在函數範圍之外。

爲什麼要使用變量時,你可以檢查狀態

function esc_key_command() { 
    var tools = $('.tool_box'); 
    var closer = $('.closer'); 
    if (tools.is(":visible")) { 
     $('.tool_box').hide(); 
    } else if (closer.is(":visible")) { 
     $('.closer').stop().fadeOut(200); 
    } else { 
     $('.closer').stop().fadeIn(200); 
    } 
} 
+0

好的。 :)那我應該怎麼做呢? – Dimser

+0

完美。 :D這是正確的事情..好吧..我不明白爲什麼它是一個var元素的問題?你知道一個邏輯jQuery解釋嗎?它可能會阻止我再次提出類似的問題:) – Dimser

+0

因爲它們是局部變量。局部變量僅在該函數調用的生命週期中保持其值。所以當這個函數完成時,這些變量被刪除。沒有提及他們。 – epascarello

1

它看起來像一個範圍問題。變量CloserIsShown正在esc_key_command函數內部創建,所以當您運行比較時它還沒有。嘗試在函數外設置變量,並在重新分配函數內的值時刪除var命令。

+0

var CloserIsShown = false; var toolboxIsShown = false; function esc_key_command(){ if(toolboxIsShown){('。tool_box')。hide(); toolboxIsShown = false; (CloserIsShown){('。closer')。stop()。fadeOut(200); CloserIsShown = false; ('。closer')。stop()。fadeIn(200);其中{0}表示這個值。 CloserIsShown = true; } } – thingEvery