2013-10-15 514 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沒有按照你在文件中寫入的順序運行。再看看事情發生的順序。 –