函数中的JavaScript提示不保存值

时间:2015-10-02 23:20:15

标签: javascript

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

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

当用户重新点击div时,我的问题就来了。弹出的警告说提示的值是" undefined"而不是用户输入的内容。为什么呢?

以下是代码:

<!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>

3 个答案:

答案 0 :(得分:1)

让我们逐步完成代码。

第一次拨打door()

var i = 1;

是全局设置的,因此i最初调用1时的值door

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的值,因为它位于全局范围内,因此永远不会输入此循环。

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

i的值现在变为4

    if (i > 3) {

4大于3,因此输入了if语句的正文。

        alert(door);

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

    }
}

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

答案 1 :(得分:0)

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

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

我建议你随时移动警报。 见例:

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]);
         }
     }

答案 2 :(得分:0)

而不是使用一段时间,为什么不是简单的if if like this https://jsfiddle.net/g3m2jftL/

$('img').load(function() {
    var imageObj = $(this);
    if (!(imageObj.width() == 1 && imageObj.height() == 1)) {
        console.log('Image source changed');
    }
});