如何使用jquery在keydown上隐藏iframe

时间:2014-11-03 12:55:47

标签: jquery iframe keydown

当我输入ESC时,我想隐藏一个iframe。我还有两段代码可以放在$(document).ready()中。第一部作品,第二部作品没有。在我看来,如果按下ESC键,他们都应该隐藏iframe。我错过了什么?

使用:

$(document).keydown(function(e) {
    if ( //e.keyCode == 13 ||     // enter
        e.keyCode == 27) {     // esc
        $(document).find(".popup").hide();
    }  
});

不起作用:

$(document).find(".popup").keydown(function(e) {
    if ( //e.keyCode == 13 ||     // enter
        e.keyCode == 27) {     // esc
        $(this).hide();
    }  
});

iframe具有类popup

1 个答案:

答案 0 :(得分:2)

第一种情况有效,因为"文件"可以解释关键事件,"文件"因为jQuery选择器总是一个活动的事件监听器,但是类.popup的元素不是。如果你在键事件之前查找.popup元素......你将它作为选择器放置,但该元素永远不会监听任何键事件。

为了更好地理解这个概念,请查看以下jsFiddle Demo

$(document).find(".popup").keydown(function(e) {
     if (e.keyCode == 27) { 
         alert();
     }  
});

请注意,如果您使用输入,请选择它并按ESC它将启动警告框。另一方面,如果你评论输入并使用div元素,它将永远不会启动警告框,因为它从未被选中并且听不到任何东西。

但是(总有一个但是......)

如果你想要一个div或另一个" deaf"要侦听关键事件的元素,您可以将tabindex="0"添加到元素,并在绑定关键事件之前给它重点:

请参阅jsFiddle Demo

HTML

<div class="popup" tabindex="0"></div>

JQuery的

$(document).find(".popup").focus().keydown(function(e) {
     if (e.keyCode == 27) { 
         alert();
     }  
});