2016-03-28 95 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