2014-11-03 55 views
2

我有一個iframe,當我鍵入ESC時,我想隱藏它。我還有兩段代碼,我可以在$(document).ready()中放置。第一部作品,第二部沒有。在我看來,如果ESC鍵被按下,它們都應該隱藏一個iframe。我錯過了什麼?如何使用jquery隱藏keydown上的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

爲什麼你不使用第一個?是立即出現的彈出式iframe,還是通過js加載異步?嘗試使用包裝div並隱藏它。也使用$('。wrapperdiv')。on('keydown',func ....) – gulty 2014-11-03 12:59:25

+2

iframe不會觸發keydown事件。 – 2014-11-03 13:02:01

+0

http://iframeeventhandlinginjquery.blogspot.in/2013/01/find-event-bind-event-keydown-of-iframe.html – 2014-11-03 13:07:22

回答

2

第一種情況是因爲「文檔」可以解釋關鍵事件,所以作爲jQuery選擇器的「文檔」始終是活動事件偵聽器,但帶有.popup類的元素不是。如果您在鍵盤事件之前查找.popup元素...您將它作爲選擇器放置,但該元素從不聽任何關鍵事件。

爲了更好地理解這個概念..檢查以下內容jsFiddle Demo

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

請注意,如果您使用的輸入,將其選中,然後按ESC將推出的警告框。另一方面,如果您評論輸入並使用div元素,它將永遠不會啓動警報框,因爲它從來沒有被選中並且聽任何東西。

(總有一個但是)...

如果你想有一個股利或其他「聾子」元素聽關鍵事件,你可以添加tabindex="0"的元素,並給它結合了之前關注這樣的關鍵事件:

jsFiddle Demo

HTML

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

JQuery

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