【问题标题】:Optimizing jQuery Hotkeys优化 jQuery 热键
【发布时间】:2011-12-13 09:44:47
【问题描述】:

所以我有一个网络应用程序,它使用从 A 到 Z 的所有热键。

每个热键都用于一个选项卡。比如:

我有 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 .

编辑/注意:抱歉,实际的标签 ID 是随机名称。

谢谢

【问题讨论】:

    标签: javascript jquery optimization hotkeys


    【解决方案1】:

    可能是这样的:

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

    我不明白 keycode 81 应该如何成为 tab20,那不是 tab17 吗?


    更新:如果您的标签ids 可以是任何东西,那么只需将它们放入数组中:

    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();
    }
    

    【讨论】:

    • 这将标签限制为实际上是 tab1、tab2 等?抱歉,我没有声明选项卡不是 tab1、tab2 等,只是随机名称。出于演示目的,我将它们命名为这样。
    • 在您的编辑中:嗯,我们还没有确定标签的确切热键。还有 3 个标签,我们正在考虑使用哪些字母。
    • @jQuerybeast:所以你的标签可以有任何旧的ids 吗? HTML 的结构如何?
    • 感谢您的回复。这是实际的工作演示:jsfiddle.net/3FHBy 试试字母 a b c。对于 20 个标签,编码太多了,你不觉得吗?我只是希望有一种优化它的方法。谢谢
    • @jQuerybeast:我添加了一些可能适合您情况的选项。
    【解决方案2】:
    $('.tabs:not(#tab' + (e.keyCode - 64) + ')').hide();
    $("#tab" + (e.keyCode - 64)).fadeIn();
    

    【讨论】:

    • 这将标签限制为实际上是 tab1、tab2 等?抱歉,我没有声明选项卡不是 tab1、tab2 等,只是随机名称。出于演示目的,我将它们命名为这样。
    【解决方案3】:

    只需用这段代码替换所有这些 if 语句

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

    【讨论】:

      猜你喜欢
      • 2011-12-12
      • 2012-05-11
      • 2010-10-21
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2011-06-21
      相关资源
      最近更新 更多