【问题标题】:Global variable isn't holding?全局变量不持有?
【发布时间】:2011-06-16 18:37:44
【问题描述】:

这应该是一个非常简单的“derp”问题,但它是:

我正在尝试在 JS 文件中设置一个全局变量,以便我可以控制动作何时触发。就我而言,我希望仅在 firstTime 为真时才调用 okBoxCall。我最初将firstTime 设置为true,然后我将其更改为false。但是,我的代码没有按应有的方式工作,因为它仍然不止一次调用okBoxCall

var Dialog;
var HUDWindow;
var smartPhone;
var firstTime = true;


$(document).ready(function(){
   smartPhone = new SmartPhone();
   initDialog();
   initHUDWindow(); 

   if(firstTime == true)
   {
       okBoxCall("Tutorial", "Welcome to McLarin Energy!");
       firstTime = false;
   }
});

我做错了什么?显然firstTime 没有将其更改为假...

编辑忘了说这是一个 3D 游戏,而不是网页。不使用 Cookie。

【问题讨论】:

  • 此代码仅在页面加载时触发,不应在页面加载时触发多次。你的意思是你希望它在多个页面视图中保持不变,所以它只在有人第一次访问页面时显示?为此,您需要使用 cookie 或 DOM 存储,每次加载此页面时,firstTime 都会重新初始化为 true

标签: javascript jquery global-variables boolean


【解决方案1】:

我猜您想检查这是否是用户第一次打开页面并打开教程(如果是)?

不可能按照您想要的方式进行。每次加载您的页面时,都会再次评估您的脚本。所以这意味着创建了一个变量firstTime,并将其设置为true。您需要的是客户端上的一些持久存储来存储是否是第一次。如果您不想忽略旧版浏览器,则需要设置cookie 或致电localStorage API

【讨论】:

  • 这不是一个页面,我正在开发一个 3D 游戏。我们不使用cookies,但我们使用数据库。无论如何感谢您的信息
  • 不管你用什么。只要它存在于您的 javascript 之外(这是页面上的游戏:D)
  • @Briz 是否是游戏并不重要,因为它是一个in网页的游戏,所以它遵循与常规页面相同的规则。
【解决方案2】:

由于 $(document).ready(...),您的函数应该只被调用一次。所以,我猜你正在重新加载页面以让警报一次又一次地显示......

也许您应该考虑使用 cookie,而不仅仅是一个普通的旧 JS 变量..?

【讨论】:

    【解决方案3】:

    okBoxCall 是做什么的?如果 okBoxCall firstTime = false 有任何错误将不会被执行。在调用 okBoxCall 之前设置值。

    $(document).ready(function(){
       smartPhone = new SmartPhone();
       initDialog();
       initHUDWindow(); 
    
       if(firstTime == true)
       {
           firstTime = false;
           okBoxCall("Tutorial", "Welcome to McLarin Energy!");
    
       }
    });
    

    【讨论】:

    • 我以为 Javascript 在遇到错误时并没有停止执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2012-04-29
    相关资源
    最近更新 更多