【问题标题】:ESCAPE key with if/else statements - jQuery带有 if/else 语句的 ESCAPE 键 - jQuery
【发布时间】:2012-10-30 15:45:28
【问题描述】:

我想让我的“esc”键根据当前情况做一些不同的事情。例如,我有一个显示工具栏的按钮,我希望“esc”键隐藏它,但我也想要'esc'键打开一个框来关闭当前页面,如果你再次按下'esc'键它应该隐藏关闭框。

我以为会是这样,但它只打开了关闭框。当我再次输入“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”键无关,因为它至少在键入键时返回一些内容。

【问题讨论】:

    标签: jquery function if-statement key


    【解决方案1】:

    var 声明是问题所在。变量的作用域是局部的,所以每次调用函数时,都是reset

    如果你想用变量来做,你需要把它们设置在函数范围之外。

    当你可以检查状态时为什么要使用变量

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

    【讨论】:

    • 完美。 :D 这是正确的事情.. 好吧.. 我不明白为什么 var 元素有问题?你知道 jQuery 的逻辑解释吗?它可能会阻止我再次问类似的问题:)
    • 因为它们是局部变量。局部变量仅在该函数调用的生命周期内保持其值。因此,当该函数完成执行时,这些变量将被删除。没有提及它们。
    • 使用闭包会使这个答案稍微好一点。
    【解决方案2】:

    看起来像是范围问题。变量CloserIsShown 是在esc_key_command 函数内创建的,所以当您运行比较时它还不存在。尝试在函数外部设置变量并在函数内部重新分配值时删除var 命令。

    【讨论】:

    • var CloserIsShown = false; var toolboxIsShown = false;函数 esc_key_command() { if (toolboxIsShown) { $('.tool_box').hide();工具箱IsShown = false; } else if (CloserIsShown) { $('.closer').stop().fadeOut(200); CloserIsShown = 假; } else { $('.closer').stop().fadeIn(200); CloserIsShown = true; } }
    猜你喜欢
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2017-03-21
    相关资源
    最近更新 更多