Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何在.js文件之间传递全局变量?_Javascript_Jquery_Html - Fatal编程技术网

JavaScript-如何在.js文件之间传递全局变量?

JavaScript-如何在.js文件之间传递全局变量?,javascript,jquery,html,Javascript,Jquery,Html,我对JavaScript和编程基本上都是新手。我想我走错了方向,但我会尽力解释我想做什么以及我是如何做的。它不起作用了 我制作了一个有五个框的页面,你可以点击。当您单击其中一个时,它将运行存储在一个js文件中的函数,并通过案例查找匹配的案例,然后更改文本框中的文本以及下面五个框中的选项。我想我遇到了全局变量无法从一个包含的.js文件传递到另一个文件的问题 我想不出别的办法了。我不能只返回一个变量,因为对于每个选择,我需要为每个case语句更改大约5个单独的变量。有没有比这些似乎不起作用的$cho

我对JavaScript和编程基本上都是新手。我想我走错了方向,但我会尽力解释我想做什么以及我是如何做的。它不起作用了

我制作了一个有五个框的页面,你可以点击。当您单击其中一个时,它将运行存储在一个js文件中的函数,并通过案例查找匹配的案例,然后更改文本框中的文本以及下面五个框中的选项。我想我遇到了全局变量无法从一个包含的.js文件传递到另一个文件的问题

我想不出别的办法了。我不能只返回一个变量,因为对于每个选择,我需要为每个case语句更改大约5个单独的变量。有没有比这些似乎不起作用的$choice变量更好的方法来来回传递这些信息

文件1.js

var $choice1 = "0";
var $choice2 = "0";
var $choice3 = "0";
var $choice4 = "0";
var $choice5 = "0";

//Main Body - start doing stuff once the page has loaded    
$( document ).ready(function() {    

//Run once
NewArea("newgame");

$("#choice1").click(function() {
    NewArea($choice1);
    });

$("#choice2").click(function() {
    NewArea($choice2);
    });

$("#choice3").click(function() {
    NewArea($choice3);
    });

$("#choice4").click(function() {
    NewArea($choice4);
    });

$("#choice5").click(function() {
    NewArea($choice5);
    });

});
然后是文件2.js

function NewArea($area) {
    switch($area)
    {
    case "newgame": //Start of the game
        $("#textbox").html("blah");
        $("#choice1").html("Look around");
            $choice1 = "look_1";
        $("#choice2").html("Listen around");
            $choice1 = "listen_1";
        $("#choice3").html("Smell around");
            $choice1 = "smell_1";
        $("#choice4").html("Feel around");
            $choice1 = "feel_1";
        $("#choice5").html("Taste around");
            $choice1 = "taste_1";
        break;

    case "look_1":
        $("#textbox").html("blah2");
        $("#choice1").html("");
            $choice1 = "0";
        break;

    default:
        break;
    }
}
像这样使用它

<script type='text/javascript' > 
  window.$choice1 = "0";
  window.$choice2 = "0"; 
  window.$choice3 = "0";
  window.$choice4 = "0";
  window.$choice5 = "0";
</script>

窗口。$choice1=“0”;
窗口。$choice2=“0”;
窗口。$choice3=“0”;
窗口。$choice4=“0”;
窗口。$choice5=“0”;

下面的链接<代码>文件1 .js<代码> >代码>文件2 .js>代码>

您应该至少考虑为全局变量命名名称,以获得清晰和略显干净的代码。您还可以将其设置为数组而不是离散变量,以便在必要时可以轻松地扩展它们(请记住,您的ID索引将关闭1,因为数组是0索引的):

正如其他人提到的,关键是这段代码在file2.js之前加载(或者在file1.js和file2.js之前加载到单独的文件中,或者确保file1.js在file2.js之前加载)

您提到您不知道另一种方法来实现这一点,而且您似乎正在使用DOM gnostic jQuery方法,因此其他可能有效(但不一定更好)的方法有:

  • 将选择存储在隐藏的输入字段中。这将使您的DOM而不是全局名称空间变得混乱因此,您可以使用
    ,然后在其中获取/设置值
  • 还可以使用jQuery函数存储每个选项的值:
    $('choice1').data('choice',0)例如

<>你也可以考虑其他的重构,但是这取决于你的文件的结构以及如何加载它们,但是希望这可以为不同的方法提供一些想法。

JS文件在你包含它们的时候简单地被包含到页面中。变量没有在页面之间来回传递。这都是一个文档。包括
1.js
2.js
之前请注意,尽管它们非常适合快速和肮脏的东西,但您可以用于严肃或生产级别的项目。使用对象文本,而不仅仅是全局变量。全局变量不建议使用:var NewArea=函数($area)。。。函数声明在您声明您案例中的变量之前被提升到顶部…您实际上不需要window herevar Aro={choice:[“0”、“0”、“0”、“0”]};我们必须摆脱这个问题;在选择数组之后。另外,在我的原始代码中,我每次都设置$choice1,而不是分别设置$choice1、$choice2,这是导致我出现问题的原因。我读了一些关于名称空间是什么的书,现在我理解了它(在一个基本的层面上)。这应该是非常有帮助的!谢谢。@Aro哦,你说得对,很抱歉。我会更新的。不过很高兴能帮忙!
var myGame = {
    choices: [0, 0, 0, 0, 0];
};