0
var isPressed =0;
document.body.onkeypress = function(evt)
{
  evt = evt || window.event;

    if (evt.keyCode!=='undefined') {
        // Do your stuff here
        isPressed = 1;
        console.log(isPressed);//Here it gives 1
    }
//return isPressed;
}
result = navigator.appVersion +"|"+n+"|"+getStyle(mydiv,'opacity')+"|"+history.length+"|"+metarefesh+"|"+hasFocus+"|"+navigator.platform+"|"+parent.top.document.referrer+"|"+activexenable+"|"+javaEnabled+"|"+hasFlash+"|"+navigator.plugins.length+"|"+ hasMouseMoved+"|"+isClicked +"|"+**isPressed**+"|"+isresized+"|"+isScrolled+"|"+getStyle(mydiv,'zIndex');

控制台.log(结果);console.log(isPressed)//即使我按下了一个键并且它已变为 1,这也会给出零。

如果我在有问题的 if 循环中执行 console.log(isPressed),它会起作用。这是我不知道的范围问题。请帮忙。

提前致谢

4

2 回答 2

1

问题是同步之一。您的代码读作:

当一个键被按下时,设置isPressed为一个

显示的价值isPressed

第一条指令只是说明稍后会发生什么,然后它就完成了。第二条指令紧随其后,在按下任何键之前,因此它显示 0。如果您要执行第三条指令:

window.setTimeout(function(){console.log(isPressed)}, 3000);

并在页面加载后立即按下一个键(在 3 秒过去之前),您将看到一个isPressed设置为 1 的日志。

如果您在按下某个键后需要执行其他逻辑,则需要将其放在“Do your stuff here”的注释中。

于 2013-10-15T15:06:26.830 回答
1

console.log这是为什么那些s 输出它们的核心答案:

Javascript 具有异步处理事件的概念。当您使用onkeypress事件时,您可以利用它。

JS 文件的其余部分做它需要做的事情(包括设置事件),然后当事件被触发(通过你按下一个键)它运行里面的代码。

在实践中,JS 文件是这样做的:

  1. 将变量设置isPressed0
  2. 将此匿名函数设置为发生onkeypress
  3. 登录isPressed到控制台。
  4. 每当onkeypress实际发生时,让我们运行我们在步骤 2 中设置的匿名函数。

当您到达第 3 步时,您实际上并没有对isPressed变量执行任何操作,因此它会将其记录为0.

后来,当你开火时,onkeypressed你实际上是在改变 的值isPressed,所以它的日志记录为1


您还应该注意,绑定到的匿名函数onkeypress并不是专门返回isPressed的。您需要添加return isPressed到底部(该评论所在的位置)。

由于这是一个绑定到事件的匿名函数,因此没有充分的理由这样做。该值不会去任何地方,如果您想操纵isPressed变量,您设置的范围是理想的。

于 2013-10-15T15:11:08.903 回答