2011-10-23 13 views
1

私はAからZまでのすべてのホットキーを使用するWebアプリケーションを持っています。jQueryホットキーの最適化

各ホットキーはタブに使用されています。だから、例えば:

私は20個のタブがあります。

#tab1, #tab2, #tab3, #tab4などをすべてのタブが.tabsのクラスを取得します。

だから私はこの作られたホットキーが機能するために:だから

if (e.keyCode == 65) {$('.tabs:not(#tab1)').hide();$("#tab1").fadeIn();} 
if (e.keyCode == 66) {$('.tabs:not(#tab2)').hide();$("#tab2").fadeIn();} 
if (e.keyCode == 67) {$('.tabs:not(#tab3)').hide();$("#tab3").fadeIn();} 
if (e.keyCode == 68) {$('.tabs:not(#tab4)').hide();$("#tab4").fadeIn();} 
if (e.keyCode == 69) {$('.tabs:not(#tab5)').hide();$("#tab5").fadeIn();} 
if (e.keyCode == 70) {$('.tabs:not(#tab6)').hide();$("#tab6").fadeIn();} 
if (e.keyCode == 71) {$('.tabs:not(#tab7)').hide();$("#tab7").fadeIn();} 
//etc till keycode 81 and tab20. 

を、これがそう、それは少ない文字で書かれるようにするより良い最適化する方法はありますか?各行で同じIDの2倍を使用しています。

編集/注:申し訳ありませんが、実際のタブIDはランダムな名前です。

おかげで、おそらくこのような

答えて

2

何か:それは

if(e.keyCode >= 65 && e.keyCode <= 81) { 
    var tab = e.keyCode - 65 + 1; 
    $('.tabs:not(#tab' + tab + ')').hide(); 
    $('#tab' + tab).fadeIn(); 
} 

私は、キーコード81はいえtab20ことになっているか表示されていないがtab17ことはないでしょうか?


に更新:あなたのタブid sがまったく何もすることができます場合は、単にアレイでそれらを投げる:

var tab_ids = [ 'where', 'is', 'pancakes', 'house', ... ]; 
if(e.keyCode >= 65 && e.keyCode <= 81) { 
    var tab = tab_ids[e.keyCode - 65]; 
    $('.tabs:not(#' + tab + ')').hide(); 
    $('#' + tab).fadeIn(); 
} 

あなたはまた、彼らのギャップを持っている場合は、代わりにオブジェクトを使用するキーコード配列:

var tab_ids = { 65: 'where', 70: 'is', 72: 'pancakes', 73: 'house', ... }; 
var tab  = tab_ids[e.keyCode]; 
if(tab) { 
    $('.tabs:not(#' + tab + ')').hide(); 
    $('#' + tab).fadeIn(); 
} 
+0

これはタブを文字通りtab1、tab2などに制限しますか?申し訳ありませんが、タブがtab1、tab2などではないことを宣言していません。ただランダムな名前です。私はデモの目的でその名前を付けました。 – jQuerybeast

+0

ur編集:まあ、タブの正確なホットキーを正確には決めていません。 3つのタブが残っており、どの文字を使うか考えています。 – jQuerybeast

+0

@jQuerybeast:あなたのタブには古い 'id'があってもかまいません。 HTMLはどのように構造化されていますか? –

0
$('.tabs:not(#tab' + (e.keyCode - 64) + ')').hide(); 
$("#tab" + (e.keyCode - 64)).fadeIn(); 
+0

これはタブを文字通りtab1、tab2などに制限しますか?申し訳ありませんが、タブがtab1、tab2などではないことを宣言していません。ただランダムな名前です。私はデモの目的でその名前を付けました。 – jQuerybeast

0

だけ交換してくださいこのコードでこれらのif文はすべて

$('.tabs:not(#tab'+(e.keyCode-64)+')').hide(); 
$("#tab"+(e.keyCode-64)).fadeIn();