当我输入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
。
答案 0 :(得分:2)
第一种情况有效,因为"文件"可以解释关键事件,"文件"因为jQuery选择器总是一个活动的事件监听器,但是类.popup的元素不是。如果你在键事件之前查找.popup元素......你将它作为选择器放置,但该元素永远不会监听任何键事件。
为了更好地理解这个概念,请查看以下jsFiddle Demo
$(document).find(".popup").keydown(function(e) {
if (e.keyCode == 27) {
alert();
}
});
请注意,如果您使用输入,请选择它并按ESC它将启动警告框。另一方面,如果你评论输入并使用div元素,它将永远不会启动警告框,因为它从未被选中并且听不到任何东西。
但是(总有一个但是......)
如果你想要一个div或另一个" deaf"要侦听关键事件的元素,您可以将tabindex="0"
添加到元素,并在绑定关键事件之前给它重点:
HTML
<div class="popup" tabindex="0"></div>
JQuery的
$(document).find(".popup").focus().keydown(function(e) {
if (e.keyCode == 27) {
alert();
}
});