在带有框架的 html 页面中捕获 keydown 事件

Rak*_*aks 3 html javascript keydown

我有一个带框架的jsp页面

<%@ include file="/includes/taglibs.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
  <head>
  <title>Welcome</title>
    <script type="text/javascript" src="/js/jquery-1.3.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $(this).keydown(function(e) {
                if(e.keyCode==27){
                    alert("escape pressed");
                    e.preventDefault();
                }
          });       
        }   
        );  
      </script> 
  </head>
      <frameset rows="42,*" frameborder="0" framespacing="0" id="framest">
          <frame src="/xyz/abc.html" scrolling="no" name="frame1"/>
          <frame src="/xyz/init.html" scrolling="no" name="frame2"/>
      </frameset>
</html>
Run Code Online (Sandbox Code Playgroud)

我正在尝试捕获转义键按下。但这似乎不起作用。在每个单独的框架 html 上,如果我编写相同的捕获代码,它就可以正常工作。

我应该在上面的代码中进行哪些更改,以便我只需编写一次 keydown 代码,这使我能够在任何框架的页面上的任何位置捕获 keydown。

Mar*_*row 5

请记住,框架是一个全新的 HTML 页面,具有完整的独立 DOM,因此 jQuery 不会将其包含在您的绑定中。

因此,您还需要绑定到这些文件:

function keyDownHandler(e) {
    if(e.keyCode==27){
        alert("escape pressed");
        e.preventDefault();
    }
}

for (var id in window.parent.frames)
    $(window.parent.frames[id].document).keydown(keyDownHandler);
$(document).keydown(keyDownHandler);
Run Code Online (Sandbox Code Playgroud)

如果由于以下原因上述方法对您不起作用id

for (var i = 0; i < window.parent.frames.length; i ++) {
   var frame = window.parent.frames[i].document;
   frame.addEventListener("keydown",keyDownHandler, true);
}
Run Code Online (Sandbox Code Playgroud)

如果要引用所有帧,请从顶层

for (var i = 0; i < top.window.frames.length; i ++) {
   var frame = top.window.frames[i].document;
   frame.addEventListener("keydown",keyDownHandler, true);
}
Run Code Online (Sandbox Code Playgroud)