web-dev-qa-db-ja.com

純粋なJSまたはjQueryでエスケープキーが押されたことを検出する方法

可能な重複:
jQueryを使ったエスケープキーのキーコード

IE、FirefoxおよびChromeでエスケープキーが押されたことを検出する方法以下のコードはIEで動作し27を警告しますが、Firefoxでは0を警告します

$('body').keypress(function(e){
    alert(e.which);
    if(e.which == 27){
        // Close my modal window
    }
});
468

注:keyCode廃止予定 代わりにkeyを使用してください。

function keyPress (e) {
    if(e.key === "Escape") {
        // write your logic here.
    }
}

これは jsfiddle です。


keyCodeは廃止予定です

たとえkeydownがうまくいかなくても、keyupkeypressはうまくいくようです。


$(document).keyup(function(e) {
     if (e.key === "Escape") { // escape key maps to keycode `27`
        // <DO YOUR WORK HERE>
    }
});

jQueryを使ったエスケープキーのキーコード

874
Jigar Joshi

keydownイベントはEscapeにはうまく機能し、すべてのブラウザでkeyCodeを使用できるという利点があります。また、リスナーを本体ではなくdocumentにアタッチする必要があります。

2016年5月に更新

keyCodeは現在非推奨になりつつあり、最近のほとんどのブラウザでは key プロパティが提供されていますが、現時点ではまともなブラウザサポートの代替手段がまだ必要ですサポートしていません)。

更新2018年9月 evt.key は現在、すべての最近のブラウザでサポートされています。

document.onkeydown = function(evt) {
    evt = evt || window.event;
    var isEscape = false;
    if ("key" in evt) {
        isEscape = (evt.key === "Escape" || evt.key === "Esc");
    } else {
        isEscape = (evt.keyCode === 27);
    }
    if (isEscape) {
        alert("Escape");
    }
};
Click me
185
Tim Down

JavaScriptを使用して あなたは作業を確認することができますjsfiddle

document.onkeydown = function(evt) {
    evt = evt || window.event;
    if (evt.keyCode == 27) {
        alert('Esc key pressed.');
    }
};

jQueryを使用して あなたは作業を確認することができますjsfiddle

jQuery(document).on('keyup',function(evt) {
    if (evt.keyCode == 27) {
       alert('Esc key pressed.');
    }
});
30
Subodh Ghulaxe

keyCode && whichkeyup ||を確認してくださいkeydown

$(document).keydown(function(e){
   var code = e.keyCode || e.which;
   alert(code);
});
15
jAndy

最善の方法はこれのための機能を作ることです

関数:

$.fn.escape = function (callback) {
    return this.each(function () {
        $(document).on("keydown", this, function (e) {
            var keycode = ((typeof e.keyCode !='undefined' && e.keyCode) ? e.keyCode : e.which);
            if (keycode === 27) {
                callback.call(this, e);
            };
        });
    });
};

例:

$("#my-div").escape(function () {
    alert('Escape!');
})

以下はESCキーを無効にするだけでなく、押された状態をチェックし、状況に応じてアクションを実行するかどうかを決定するコードです。

この例では、

e.preventDefault();

eSCキーを押す動作を無効にします。

あなたはこれでdivを隠すことのような何かをするかもしれません:

document.getElementById('myDivId').style.display = 'none';

ESCキーが押された場所も考慮されます。

(e.target.nodeName=='BODY')

これに当てはめたいのであれば、条件部を全部削除しても構いません。または、カーソルが入力ボックスにあるときにのみこのアクションを適用するようにここでINPUTをターゲットにすることもできます。

window.addEventListener('keydown', function(e){
    if((e.key=='Escape'||e.key=='Esc'||e.keyCode==27) && (e.target.nodeName=='BODY')){
        e.preventDefault();
        return false;
    }
}, true);
7
Tarik

私は最も簡単な方法はバニラジャバスクリプトだと思います:

document.onkeyup = function(event) {
   if (event.key === 27){
     //do something here
   }
}
2
Duan Walker