2016-03-28 86 views
-1

我目前正在研究The Odin Project's first project in their curriculum在JavaScript中的.click函數中將全局變量更改爲window.prompt()變量

第4步,我想創建一個window.prompt(),將要求用戶輸入一個新號碼分配給預先存在的全局變量,像這樣:

var gridSize; 
var gridAmount; 

    if (gridAmount === "", null, undefined, false || gridAmount < 1 ||gridAmount > 64 || isNaN(gridAmount)){ 
      var gridSize = 16; 
     } else { 
      var gridSize = gridAmount; 
     }; 

    function grid() { 

     for (var x = 0; x < gridSize; x++) { 
      $('#container').append("<div class='grid'></div>"); 
      $('.grid').height(800/gridSize); 
     }; 
     for (var x = 0; x < gridSize; x++) { 
      $('.grid').append("<div class='row'></div>") 
      $('.row').width(800/gridSize); 
      $('.row').height(800/gridSize); 
     }; 
    }; 

    $('#reset-squares').click(function(){ 
     location.reload(true); 
     var gridAmount = window.prompt("From 1 to 64, what is your grid's parameters (00 x 00)?"); 
    }); 

我是什麼試圖做的是重置頁面,然後將變量gridAmount分配給.click()函數中定義的新數字。我錯過了什麼嗎?用目前的代碼結構無法實現嗎?

這裏有一個demo

提前感謝!

回答

1

var前面的gridAmount出功能。

第一個var gridAmount正在創建一個全局變量。如果你在函數中爲它分配一個新值,它將更新全局變量。

在該函數中添加var會爲該函數具有相同名稱的局部變量,因此全局變量不會更新。

同時結帳jQuery's .empty and .destroy methods。他們將允許您準備HTML代碼的下一輪運行。

+0

我在演示和個人文件嘗試這樣做,它仍然返回了同樣的問題。我認爲這可能與重新加載函數有關,防止我的新變量被重新分配。 – jsadams27

+0

從gridSIzes中刪除** var ** s - 你應該只聲明一次全局變量。和location.reload – user2182349

0

你是對的,認爲它可能是不可能的。在可以設置gridAmount之前,頁面正在重新加載。

您需要將值傳遞迴頁面並在重新加載頁面之前將其設置。

例如,您可以使用查詢字符串?show_prompt=true(或包含您需要的值等)來重新加載頁面。

然後,您將能夠檢查頁面加載/重新加載並顯示提示時是否設置,從用戶獲取值並將其設置爲腳本頂部的var gridAmount

0

gridAmount 是你的全球權利嗎?並且您想要將提示的值分配給它?

gridAmount = window.prompt("From 1 to 64, what is your grid's parameters (00 x 00)?"); 

分配新的值時,只是刪除了var ...

+0

以供參考:https://developer.mozilla.org/en/docs/Web/JavaScript/Closures – jatazoulja