Javascript 使用JQuery在ESC按键处关闭自定义框

Javascript 使用JQuery在ESC按键处关闭自定义框,javascript,jquery,Javascript,Jquery,我有以下对话框的HTML代码: <div id="modal-dialog" class="no-display"> <div class="form"> <div class="close"> </div> <div align="center"> <h2><u>form</u>

我有以下对话框的HTML代码:

<div id="modal-dialog" class="no-display">
        <div class="form">
            <div class="close">

            </div>
            <div align="center">
                <h2><u>form</u></h2>
            </div>          
            <form>
                <label for="yourname">Full name:</label><input type="text" name="yourname">
                <label for="email">E-mail:</label><input type="text" name="email">
                <label for="message">Message:</label></textarea><textarea type="text" name="message"></textarea><br/>
                <div class="clear"></div>
                <p align="center"><button>Send feedback</button></p>
            </form>
        </div>
    </div>
我写道:

$("#modal-dialog").live("keyup", function(e) {
        if(e.keyCode === 27 && !($(this).hasClass("no-display")))
        {
            $("#feedback-modal-dialog input").each(function() {
                $(this).attr("value","");
            });
            $("#feedback-modal-dialog textarea").each(function() {
                $(this).val("");
            });
            $("#modal-dialog").addClass("no-display"); //or .hide()
        }       
    });
ESC键仅在输入聚焦时有效,否则无效

我想在按下ESC键时关闭“模式”对话框

我的JS代码中有错误吗

谢谢

这个怎么样:

$("html").live("keyup", function(e) {

if(e.keyCode === 27 && !($('#modal-dialog').hasClass("no-display")))

    escape_check();

}

}

function escape_check() {

$("#modal-dialog").removeClass("no-display");

$("#feedback-modal-dialog input").each(function() {
    $('#modal-dialog').attr("value","");
});
$("#feedback-modal-dialog textarea").each(function() {
    $('#modal-dialog').val("");
});
$("#modal-dialog").addClass("no-display"); //or .hide()


}
这个怎么样:

$("html").live("keyup", function(e) {

if(e.keyCode === 27 && !($('#modal-dialog').hasClass("no-display")))

    escape_check();

}

}

function escape_check() {

$("#modal-dialog").removeClass("no-display");

$("#feedback-modal-dialog input").each(function() {
    $('#modal-dialog').attr("value","");
});
$("#feedback-modal-dialog textarea").each(function() {
    $('#modal-dialog').val("");
});
$("#modal-dialog").addClass("no-display"); //or .hide()


}
如果$modal dialog没有焦点,绑定到$modal dialog将不会捕获正在按下的ESC按钮

最好将keyup绑定到整个文档,这样无论页面上的哪个位置有焦点,它都会引发keypress事件。

如果$modal dialog没有焦点,绑定到$modal dialog将不会捕获正在按下的ESC按钮

最好将keyup绑定到整个文档,这样无论页面上的焦点在哪里,它都会引发keypress事件。

。自从jQuery 1.7以来,live已被弃用。尝试使用.on代替

它的工作原理是一样的。请参阅。

.live自jQuery 1.7以来已被弃用。尝试使用.on代替


它的工作原理是一样的。请参阅。

您使用的是哪个版本的jQuery?只是好奇,在比较键代码时使用===或==是否有区别?@Niklas两者都是正确的,但实际上使用===更好。它更严格,不执行类型强制。阅读有关Javascript Garden的更多信息:您使用的是哪个版本的jQuery?只是好奇,在比较关键代码时使用===或==有什么区别吗?@Niklas两者都是正确的,但实际上最好使用===。它更严格,不执行类型强制。阅读有关Javascript Garden的更多信息:$html我错过了它:。我的错。谢谢$html我错过了:。我的错。谢谢你,我会用上而不是活的。Thx for Advice我将在上使用而不是live。谢谢你的提醒!如果你不知道焦点的要求,那么调试它是非常困难的。谢谢你的提醒!如果您不知道焦点需求,那么调试它就非常困难。