0

キーコマンドから1秒以内に「mouseactive」をtrueに設定しようとしていますが、その時間内にキーが押された場合、そのアクションをキャンセルしたいと思います。しかし、私はこれを行う方法を理解できないようです。これは私が持っているものです...

$(window).keydown(function(e) {
if (e.keyCode == 40) {
        e.preventDefault();
        mouseactive = false;
        clearTimeout(t);
        var t = setTimeout("mouseActive()",800);
} else if (e.keyCode == 38) {
        e.preventDefault();
        mouseactive = false;
        clearTimeout(t);
        var t = setTimeout("mouseActive()",800);
}
});

function mouseActive() {
mouseactive = true;
}

しかし、これは機能しません。mouseactive を true に戻すことはできません。ここで何が間違っているのか教えてもらえますか?

4

3 に答える 3

2

編集:冗長なコードをクリーンアップしました。

その他の編集:var t yourが を含むクロージャの外側で定義されていることを確認してください$(document).ready。下記参照、

var t = null;

$(document).ready(function () {
   //..below code except for var t = null
});

ハンドラの外側で var t を宣言します。

var t = null;
$(window).keydown(function(e) {
    e.preventDefault();

   if (e.keyCode == 40) {
        mouseactive = false;
   } else if (e.keyCode == 38) {
        mouseactive = false;
   }

   if (t != null) clearTimeout(t);
   t = setTimeout(mouseActive, 800);
});

function mouseActive() {
   mouseactive = true;
}
于 2012-04-06T20:47:59.267 に答える
2

あなたの問題はt、関数が2回目に実行されたときに範囲内にないことです。tグローバル変数を作成する必要があります。

var t;

$(window).keydown(function(e) {
if (e.keyCode == 40) {
        e.preventDefault();
        mouseactive = false;
        clearTimeout(t);
        t = setTimeout(mouseActive,800);
} else if (e.keyCode == 38) {
        e.preventDefault();
        mouseactive = false;
        clearTimeout(t);
        t = setTimeout(mouseActive,800);
}
});

function mouseActive() {
mouseactive = true;
}

PS 文字列をsetTimeoutに渡さないでください。関数を渡します。eval文字列を渡すときに使用します。

于 2012-04-06T20:49:12.917 に答える
1

あなたはいつも「t」を再宣言しています。これを試してください:

var t = null;  
$(window).keydown(function(e) {
    if (e.keyCode == 40) {
            e.preventDefault();
            mouseactive = false;
            if(t != null)
            {
               clearTimeout(t);
            }
            t = setTimeout("mouseActive()",800);
    } else if (e.keyCode == 38) {
            e.preventDefault();
            mouseactive = false;
            if(t != null)
            {
               clearTimeout(t);
            }
            t = setTimeout("mouseActive()",800);
    }
    });

    function mouseActive() {
    mouseactive = true;
    }
于 2012-04-06T20:49:01.890 に答える