【问题标题】:JavaScript prompt in function not saving value函数中的 JavaScript 提示不保存价值
【发布时间】:2015-10-02 23:20:15
【问题描述】:

我有一个 div,当点击它时,它会调用一个名为 door() 的 onclick 函数。出现提示,当用户输入提示时,提示消失。

我做了一个 if 语句说:如果变量 (i) 大于 3(当用户在输入提示后再次单击 div 时会发生这种情况)然后提醒用户在提示中输入的内容。

当用户重新单击 div 时,我的问题就出现了。弹出的警报说提示的值是“未定义”,而不是用户输入的内容。为什么?

代码如下:

<!DOCTYPE html>

<html>
    <head>
        <style>
            #mainWall{position: absolute; width: 98%; height: 98%; border: 3px solid brown; }
            #door{position: absolute; left: 49%; width: 5%; height: 10px; background: green; bottom: 1%;}
            #widthCorridor{position: absolute; width: 5%; height: 98%; left: 49%; background: red; bottom: 18px;}
            #mainCorridor{position: absolute; width: 98%; height: 5%; left: 1%; background: red; bottom: 50%;}
        </style>
    </head>
    <body>
        <div id="mainWall"></div>
        <div id="mainCorridor"></div>
        <div id="widthCorridor"></div>
        <div id="door" onclick="door()"></div>



        <script type="text/javascript">
            var i = 1;

            function door() {
                while (i == 1){
                    var door = prompt();
                    i++;
                } 
                i++
                if (i > 3) {
                    alert(door);
                }


            }


        </script>
    </body>
</html>

【问题讨论】:

    标签: javascript


    【解决方案1】:

    让我们单步执行代码。

    第一次拨打door()

    var i = 1;
    

    是全局设置的,所以当 door 最初被调用时,i 的值将是 1

    function door() {
    

    变量door实际上是由于提升在这里声明的。

        while (i == 1){
    

    此时进入while循环,因为i的值为1

            var door = prompt();
    

    用户可以输入任何值,只要按下“ok”就会返回一个字符串值。如果他们按下“取消”,则返回null

            i++;
    

    i 的值现在变为2

        }
        i++
    

    i 的值现在变为3

        if (i > 3) {
    

    由于3 不大于3,所以跳过这个if 块,函数结束。作用于该函数的door 的值被转储给垃圾收集器。

            alert(door);
        }
    }
    

    现在是你第二次拨打door()

    function door() {
    

    变量door 在这里声明,同样是由于提升。声明带来了 undefined 的值。

        while (i == 1){
    

    i 保留 3 的值,因为它在全局范围内,因此永远不会进入这个 while 循环。

            var door = prompt();
            i++;
        }
        i++
    

    i 的值现在变为4

        if (i > 3) {
    

    4 大于 3,因此输入了 if 语句的主体。

            alert(door);
    

    door 变量的值被警告。它从未初始化,因此它保留了声明中的 undefined 值。

        }
    }
    

    函数结束,垃圾收集器再次收集door变量。

    【讨论】:

    • 哈哈是的!哈我完全错过了!也是很好的例子!
    • 所以答案是把if (i &gt; 3)改成if (i &gt; 2)
    • @Aaronpd1 将他的答案标记为正确并给他投票。
    • 由于我的声誉,我还不能投票,但我会标记为正确的。
    【解决方案2】:

    您的提示正在保存您的价值。但是,您在 while 循环或 if 语句中存在逻辑错误..

    变量“i”将始终为 2,因为当 i != 1 时 while 循环为假......

    我建议您将警报移至您的时间。 见例子:

    while (i < 4) {
                 var door = prompt();
                 alert(door);
                 i++;
             }
    

    或者你可以这样写:

    function test() {
             var i = 1;
             var prompts = [];
             while (i < 4) {
                 var door = prompt();
                 prompts.push(door);
                 i++;
             }
    
             for (var x = 0; x < prompts.length; x++)
             {
                 alert(prompts[x]);
             }
         }
    

    【讨论】:

      【解决方案3】:

      与其使用一段时间,不如使用像这样的简单 if else https://jsfiddle.net/g3m2jftL/

      <body>
          <div id="mainWall"></div>
          <div id="mainCorridor"></div>
          <div id="widthCorridor"></div>
          <div id="door" onclick="counter()"></div>
          <script>
              var ct = 1;
              var words;
      
              function counter() {
                  if (ct == 1) {
                      words = prompt();
                      ct = ct + 1;
                  } else {
                      alert(words);
                  }
              }
          </script>
      </body>
      

      【讨论】:

      • 我的工作,但 zzzzBoz 的答案是正确的答案。
      猜你喜欢
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      相关资源
      最近更新 更多