2013-10-15 294 views
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'); 

console.log(result); console.log(isPressed)//即使我按下了一个键并将其更改为1,它也会给出零。范围界定问题Javascript

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

在此先感谢

+3

这与范围界定无关。只是在事件处理程序之外的'console.log(isPressed)'在按键之前执行,并且这段代码对我来说没有意义。另外'if'不是一个循环,它是一个条件表达式。如果你想在按下按键之后执行某些操作,请在事件处理程序中执行该操作,或者从事件处理程序调用该操作。 – PSL

+0

@PSL谢谢。你可以解释一下代码。 –

回答

1

问题是其中一个同步。您的代码被读作:

当按下一个键,设置isPressed一个

展现isPressed

值的第一个指令只是说在以后会发生什么及时完成。马上第二个指令如下,按下任何按键之前,所以它显示为0如果你是做第三条指令:

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

,按页面加载后,一键右(前的3秒后),你将会看到一条记录,其中isPressed设置为1.

如果在按下某个键后需要执行其他逻辑,则需要将它放在注释“在此处执行操作”。

+0

Thanks.So我的目标是查看是否在窗口上按下了任何按键,并将该按下事件设置为1.当任何按键被按下时。因此我的最终输出是这样的。因此结果变量应该能够访问isPressed的值; –

+1

“看看是否有任何按键被按下” - >你什么时候需要知道? – Tibos

+0

我在代码中添加了结果变量。非常感谢。 –

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变量,那么你设置的范围是理想的。

+0

@EvanSiegel.Have在我的代码更改。结果变量是我试图访问它,但仍然值为0.谢谢 –

+0

@SwarajChhatre,您仍然设置事件被触发前的'result'变量。如果你把它放在你的事件函数中,它将被正确设置。你应该注意到,JavaScript没有按照你在文件中写入的顺序运行。再看看事情发生的顺序。 –