1

我对 Jquery 和 Javascript 很陌生。我尝试在网站上搜索我的问题的答案,但我不确定我是否使用正确的术语来找到我的答案。如果已经有答案,我将不胜感激该链接,以便我查看它。

我的问题:我正在使用 HTML、CSS、Jquery 和 Javascript 构建一个移动应用程序。这是一款交互式 CYOA 类型的游戏/应用程序。我使用以下函数让玩家输入他们的名字:

<script> //to get player's name and use through out the game
function playerName ()
{
    var x;
    var player=prompt("Please enter your name");
if (player!=null)
    {
    x= " " + player + ", Please wait while the system updates your work orders";
    document.getElementById("logon").innerHTML=x;
    }
}
</script>

我想要做的是能够在整个游戏中放置用户的名字。但是我不确定一旦玩家最初在提示框中输入了他们的名字,我该怎么做。

任何帮助将不胜感激。谢谢

4

10 回答 10

5

为您的整个应用程序创建一个全局命名空间,并在其中放置任何相关值。

var MyApp = {};

MyApp.playerName = function () {
    var x;
    MyApp.player=prompt("Please enter your name");
    if (MyApp.player!=null) {
        x= " " + MyApp.player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
}

您需要更改对playerName()to的调用MyApp.playerName()

于 2013-04-23T20:43:56.583 回答
4

我建议像下面这样简单,只要player变量是在任何函数之外定义的(这里是,因为值是从函数返回的)它将具有全局范围(您也可以通过省略var关键字,这使得变量全局作用域而不管它是在哪里定义的):

function playerName(){
    var name = prompt('What is your name?'),
        x;
    if (player) {
        x = " " + name + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
    return name;
}
var player = playerName;
于 2013-04-23T20:41:53.613 回答
2

我关闭建议这一点,但你可以使player变量全局。

var player;

function playerName () {
    var x;
    player=prompt("Please enter your name");
    if (player!=null) {
        x= " " + player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
}
于 2013-04-23T20:40:09.527 回答
1

您可以通过这样的范围界定它来避免使其成为全球性的:

(function() {
    var player;
    function playerName ()
    {
        var x;
        player=prompt("Please enter your name");
        if (player!=null)
        {
            x = " " + player + ", Please wait while the system updates your work orders";
            document.getElementById("logon").innerHTML=x;
        }
    }   
})();

现在,您在最外层函数声明(但不是全局)内编写的任何代码都可以访问 player 变量。

于 2013-04-23T20:42:03.743 回答
0

在窗口级别定义全局变量通常是在 jQuery 中执行此操作的方法 - 在本例中为“window.player”。虽然从技术上讲,您可以通过简单地省略“var”来使其全局化,但不建议这样做。

于 2013-04-23T20:44:18.213 回答
0

为了在其他函数和您的脚本中使用变量 x,您可以将其设为全局变量,要在函数内部创建变量全局变量,您可以尝试以下操作:

<script>
function foo() {
    window.newGlobalVariable = 'moo';
}
</script>

例如在您的代码中:

<script> //to get player's name and use through out the game
function playerName (){

    widnow.x;
    widnow.player=prompt("Please enter your name");
   if (player!=null){
       x= " " + player + ", Please wait while the system updates your work orders";
       document.getElementById("logon").innerHTML=x;
   }
}
</script>
于 2013-04-23T20:51:13.143 回答
0

在函数外部创建一个 gloval 变量:

var player='';

然后你可以从一个函数中设置它:

function myFunction(){ player='new name'; }

或阅读:

function myOtherFunction(){ console.log(player) }
于 2013-04-23T20:41:47.683 回答
0

您面临的是变量范围。变量仅在{}声明它的块中可见(想想大括号)。

但是,您也可以访问已经在外部范围内的其他变量,例如window. 举个例子:

alert(foo); // undeclared
alert(window.bar); // undeclared--so far...

function foo(){
  var foo = "foo";
  window.bar = "bar";

  alert(foo); // works -- "foo";
  alert(window.bar); works -- "bar";
}

alert(foo); // undeclared
alert(window.bar); // undeclared (still, haven't called foo() yet)

foo();
alert(window.bar); // "bar" (now it works)

这也适用于函数名称和您可能拥有的任何其他类型的引用,但是,在这种情况下,您可以从函数返回一个值并避免使用全局变量。

于 2013-04-23T20:42:45.297 回答
0

player也许制作一个对象就足够了,如下所示:

var player = {};

将它放在您的应用程序中,在任何其他功能之外。然后,当您需要在播放器上设置一个值时,例如,他/她的名字,将其放入函数中:

player.name = prompt("Please enter your name");

这样,您就可以访问这些数据,但您不必使用全局变量,这些变量是在没有var关键字的情况下创建的,并且被广泛认为是非常糟糕的形式。

于 2013-04-23T20:48:00.170 回答
-1

另一种解决方案(当然不是最好的)是创建playerName函数的属性。这会在不污染全局范围的情况下公开它。只是在 JS 中演示函数作为对象的功能。

function playerName ()
{
    var x;
    var player=prompt("Please enter your name");
    if (player!=null)
    {
        x= " " + player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
    playerName.player = player;
}
于 2013-04-23T20:54:37.253 回答