Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在帧上设置偶数侦听器时的竞争条件_Javascript_Html_Listener_Frame - Fatal编程技术网

Javascript 在帧上设置偶数侦听器时的竞争条件

Javascript 在帧上设置偶数侦听器时的竞争条件,javascript,html,listener,frame,Javascript,Html,Listener,Frame,我试图在一个由框架组成的页面上设置一个全局键盘事件侦听器,当我开始太早输入时,我会有一种奇怪的行为 主页面如下所示: <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title&

我试图在一个由框架组成的页面上设置一个全局键盘事件侦听器,当我开始太早输入时,我会有一种奇怪的行为

主页面如下所示:

<html>
   <head>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>My title</title>
   </head>
   <frameset rows="*" cols="250,*" framespacing="3" frameborder="yes" border="1" class="doc-result-frameset">
       <frame src="left.html" name="info" id="info" scrolling="auto" class="doc-result-frame-info">
       <frame src="right.html" name="doc" id="doc" class="doc-result-frame-doc">
   </frameset>
   <noframes>&lt;body&gt;&lt;/body&gt;</noframes>
</html>

我的头衔
身体
右框是一个页面,它的加载时间比左框长得多。左框是我试图添加一些javascript来控制整个页面的地方

我写了以下内容:

top.window.addEventListener("keydown",
   function(event: KeyboardEvent) {handleKeyboardEvent(event, previous, next);},
   true);
var topWindowFrames : Window = top.window.frames;
for (var i = 0; i < topWindowFrames.length; i ++) {
   var frame : Window = topWindowFrames[i];
   frame.onload = (function(frame: Window) {
      return function() {
         frame.document.addEventListener("keydown",
            function(event: KeyboardEvent) {handleKeyboardEvent(event, previous, next);},
            true);};
         })(frame);   
}
top.window.addEventListener(“向下键”),
函数(event:KeyboardEvent){handleKeyboardEvent(event,previous,next);},
正确的);
var topWindowFrames:Window=top.Window.frames;
对于(var i=0;i
我也尝试过不在另一个函数中包装
frame.onload
,只在代码中使用
frame

我遇到的问题是,如果我重新加载页面,并很快单击右框以使其聚焦并开始键入,左框的事件侦听器将永远无法工作。相反,如果我等到所有内容都加载后才开始键入或单击,则一切正常


我不知道出了什么问题,因为我似乎找不到一种方法来检查每个帧注册了哪些侦听器。

通过body.onLoad触发事件侦听器的绑定

<body onLoad="bindEvents()">

谢谢您的回答。我试试这个。我已经在
$(document).ready()子句中执行了此代码。你认为那会有不同吗?