2015-10-02 97 views
3

我有一個div,輕敲後,來電()稱爲門一個onclick功能。出現一個提示,當用戶輸入提示時,它就會消失。JavaScript的提示不保存價值

我做的,如果聲明稱:如果一個變量(i)大於3(當用戶鍵入到提示後,再次單擊DIV這恰好),則提醒用戶在提示鍵入的內容。

我的問題是當用戶再次點擊股利。彈出的提示說提示的值爲「未定義」,而不是用戶輸入的內容。爲什麼?

下面的代碼:

<!DOCTYPE html> 

<html> 
    <head> 
     <style> 
      #mainWall{position: absolute; width: 98%; height: 98%; border: 3px solid brown; } 
      #door{position: absolute; left: 49%; width: 5%; height: 10px; background: green; bottom: 1%;} 
      #widthCorridor{position: absolute; width: 5%; height: 98%; left: 49%; background: red; bottom: 18px;} 
      #mainCorridor{position: absolute; width: 98%; height: 5%; left: 1%; background: red; bottom: 50%;} 
     </style> 
    </head> 
    <body> 
     <div id="mainWall"></div> 
     <div id="mainCorridor"></div> 
     <div id="widthCorridor"></div> 
     <div id="door" onclick="door()"></div> 



     <script type="text/javascript"> 
      var i = 1; 

      function door() { 
       while (i == 1){ 
        var door = prompt(); 
        i++; 
       } 
       i++ 
       if (i > 3) { 
        alert(door); 
       } 


      } 


     </script> 
    </body> 
</html> 

回答

1

讓我們一步通過代碼。

你第一次叫door()

var i = 1; 

是全局設置,所以i值將是1door最初稱爲

function door() { 

變量door這裏實際上是宣佈因起吊。

while (i == 1){ 

在這一點上,而進入循環,因爲i1

 var door = prompt(); 

的值,用戶可以輸入任何值,只要他們按「OK」的字符串值將被退回。如果他們按下「取消」,則返回null

 i++; 

i值現在成爲2

} 
    i++ 

i值現在成爲3

if (i > 3) { 

作爲3不大於3更大,這if塊被跳過,並且該功能結束。垃圾收集器轉儲作用於該函數的door的值。

 alert(door); 
    } 
} 

現在進行第二次調用door()

function door() { 

變量door在這裏宣佈,再次因吊裝。聲明帶來的值爲undefined

while (i == 1){ 

i保留的3值,因爲它在全球範圍內,所以從來沒有進入這個while循環。

 var door = prompt(); 
     i++; 
    } 
    i++ 

i的值現在變成4

if (i > 3) { 

4大於所以進入3if語句體。

 alert(door); 

door變量的值會收到警報。它從未初始化,因此它保留從聲明中的值undefined

} 
} 

的函數結束和垃圾收集器再次收集door變量。

+0

大聲笑是的!哈我完全錯過了!很好的例子! –

+0

謝謝!!!很有幫助。 – Aaronpd1

+0

所以答案是改變'if(i> 3)'到'if(i> 2)' –

0

您提示保存價值的罰款。但是你有在if語句,while循環或邏輯錯誤..

的變量「i」將永遠是2,因爲while循環是假的,當我!= 1 ..

我建議您將警報轉移到您的時間。 見例如:

while (i < 4) { 
      var door = prompt(); 
      alert(door); 
      i++; 
     } 

,或者你可以把它寫成這樣:

function test() { 
     var i = 1; 
     var prompts = []; 
     while (i < 4) { 
      var door = prompt(); 
      prompts.push(door); 
      i++; 
     } 

     for (var x = 0; x < prompts.length; x++) 
     { 
      alert(prompts[x]); 
     } 
    } 
0

而不是使用了一段時間,爲什麼不簡單的,如果別人這樣https://jsfiddle.net/g3m2jftL/

<body> 
    <div id="mainWall"></div> 
    <div id="mainCorridor"></div> 
    <div id="widthCorridor"></div> 
    <div id="door" onclick="counter()"></div> 
    <script> 
     var ct = 1; 
     var words; 

     function counter() { 
      if (ct == 1) { 
       words = prompt(); 
       ct = ct + 1; 
      } else { 
       alert(words); 
      } 
     } 
    </script> 
</body> 
+0

謝謝!固定。 – Aaronpd1

+0

我的工作,但zzzzBoz的答案是正確的答案。 –