1

「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」キーの呼び出しとは何の関係もないことはわかっています。

4

2 に答える 2

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);
    }
}
于 2012-10-30T15:48:12.693 に答える
1

範囲の問題のようです。変数CloserIsShownesc_key_command関数内で作成されているため、比較を実行するときにはまだ存在していません。関数の外で変数を設定し、var関数内で値を再割り当てするときにコマンドを削除してみてください。

于 2012-10-30T15:51:30.603 に答える