代码之家  ›  专栏  ›  技术社区  ›  Mithun Sreedharan Kuldeep Modi

如何使用纯JS或JQuery检测Escape按键?

  •  462
  • Mithun Sreedharan Kuldeep Modi  · 技术社区  · 15 年前

    可能重复:
    Which keycode for escape key with jQuery

    如何在IE、火狐和Chrome中检测到Escape按键? 以下代码适用于IE和警报 27 ,但在Firefox中,它会发出警报 0

    $('body').keypress(function(e){
        alert(e.which);
        if(e.which == 27){
            // Close my modal window
        }
    });
    
    7 回复  |  直到 6 年前
        1
  •  861
  •   Jigar Joshi    7 年前

    注: keyCode getting deprecated 使用 key 相反。

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

    这里是 jsfiddle


    键码 正在被弃用

    似乎 keydown keyup 工作,即使 keypress 可能不


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

    Which keycode for escape key with jQuery

        2
  •  182
  •   Lee Goddard    6 年前

    这个 keydown 活动对于逃跑很有用,并且有助于你使用 keyCode 在所有浏览器中。此外,还需要将侦听器附加到 document 而不是身体。

    2016年5月更新

    键码 现在正处于被否决的过程中,大多数现代浏览器提供 key 属性now,尽管您现在仍然需要一个适当的浏览器支持回退(在编写当前版本的Chrome和Safari时不支持它)。

    更新日期: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
        3
  •  30
  •   Subodh Ghulaxe    11 年前

    使用 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.');
        }
    });
    
        4
  •  15
  •   poxip    10 年前

    检查 keyCode &; which 和; keyup γ keydown

    $(document).keydown(function(e){
       var code = e.keyCode || e.which;
       alert(code);
    });
    
        5
  •  6
  •   Ivijan Stefan Stipić    10 年前

    最好的办法就是让它发挥作用

    功能:

    $.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!');
    })
    
        6
  •  6
  •   Tarik    8 年前

    下面的代码不仅禁用了Esc键,而且还检查了按下该键的条件,根据情况,它将执行或不执行该操作。

    在这个例子中,

    e.preventDefault();
    

    将禁用Esc键按下操作。

    您可以这样做来隐藏DIV:

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

    在按下ESC键的情况下,还应考虑:

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

    如果您希望将此应用于所有人,则可以删除此if条件部分。或者,您可以将这里的输入作为目标,仅在光标位于输入框中时应用此操作。

    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
  •  2
  •   Duan Walker    9 年前

    我认为最简单的方法是普通的javascript:

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