Javascript 在第二个窗口中控制内容时,单次按键触发两次
问题是:当一个按键事件在两个窗口中更新内容时,我从一个按键事件中得到了两次按键。(我是一名业余爱好者。请原谅我缺乏专业知识。谢谢。) 我试图使用一个浏览器窗口来控制从第一个窗口启动的窗口中内容的显示。第一个窗口还有一个div,显示发送到第二个窗口的内容 我正在使用shortcut.js将更新每个窗口的命令指定给空格键。但我将要描述的问题也发生在使用普通的jQuery keypress()函数时。我尝试过修改shortcut.js函数的参数,但没有效果 下面是代码的简化版本:Javascript 在第二个窗口中控制内容时,单次按键触发两次,javascript,jquery,html,Javascript,Jquery,Html,问题是:当一个按键事件在两个窗口中更新内容时,我从一个按键事件中得到了两次按键。(我是一名业余爱好者。请原谅我缺乏专业知识。谢谢。) 我试图使用一个浏览器窗口来控制从第一个窗口启动的窗口中内容的显示。第一个窗口还有一个div,显示发送到第二个窗口的内容 我正在使用shortcut.js将更新每个窗口的命令指定给空格键。但我将要描述的问题也发生在使用普通的jQuery keypress()函数时。我尝试过修改shortcut.js函数的参数,但没有效果 下面是代码的简化版本: g_win = wi
g_win = window.open('displaywin.html'); // launch the second window
slideContent = updateTheContent(); // get new content for window #2
slideContentPreview = alterTheContent(slideContent); // modify it for window #1
if (g_win != undefined){ // Is window #2 open?
$("#display2").html(slideContent); // display the content in window #2
}
$("#display1").html(slideContentPreview); // always display the content in window #1
以下是jquery按键代码:
$(document).keypress(function(e) {
switch(e.which) {
case 32: { // space
showNextSlide();
break;
}
default: return;
}
e.preventDefault();
});
奇怪的是,如果我没有启动第二个窗口,它就可以正常工作。但如果g_win启动,内容会正确更新,但空格键事件会再次触发,导致程序再次更新内容。其效果是在两个窗口中跳过其他每一段内容
我犯了什么惊人的明显错误?谢谢
[稍后:]这是window#2的整个html:
什么
在“演示者”视图中单击以开始
我的猜测是,在加载第二个窗口时,第二次绑定相同的按键事件处理程序,因为它加载相同的javascript。您可以通过仅在尚未加载窗口2时设置处理程序来解决此问题。大致如下:
if($("#display2").html() == ""){
$(document).keypress(function(e) {
switch(e.which) {
case 32: { // space
showNextSlide();
break;
}
default: return;
}
e.preventDefault();
});
}
更多代码将有助于解决问题。如果windows 1和2处于打开状态,则仅确认windows 2的按键。如果只有1个窗口打开,则从窗口1确认按键。我不确定我头脑中的这个语法是什么,所以我将在JSFIDLE中尝试它,然后再与您联系。但是我认为这是需要做的。Siddharth,我很乐意(除了尴尬)提供更多的代码,但是整个脚本有600行,我不确定哪些是相关的部分。业余爱好者!不是很好的业余爱好者!谢谢,乔纳森。我很感激你不辞辛劳地回避。唉,你的建议不起作用。按键绑定代码在加载窗口#1时运行,但在创建窗口#2时不运行。窗口#2中没有代码;它纯粹用于html显示。所以#2的标题只有一些谷歌字体的include语句,还有一个我已经注释掉的css文件。尽管如此,我还是以(g_win!=undefined)为条件尝试了您的代码。同样的问题:(
if($("#display2").html() == ""){
$(document).keypress(function(e) {
switch(e.which) {
case 32: { // space
showNextSlide();
break;
}
default: return;
}
e.preventDefault();
});
}