0

当我使用 inputName 函数测试字符串时,我陷入了一个无限循环,该循环不断在浏览器中显示 alert() 函数。我不确定为什么会发生这种情况背后的逻辑。请注意,这是针对学校作业的,我需要使用 for 循环和带参数的函数来测试名为 employeeName 的输入数据。该函数在返回值之前测试数据是否为空、空或数字。

<html>
<head>
<script type="text/javascript">
function inputName(name) 
{
    var flag;

    do
    {

        flag = false;
        if (name == null)
        {
            alert("You have hit the 'Cancel' button!");
            return name;
            flag = false;
        }
        if (name == "")
        {
            alert("You tried entering no name!");
            flag = true;
        }
        else if (!isNaN(name))
        {
            alert("You tried entering a number!");
            flag = true;
        }
        else if (name.length < 2)
        {
            alert("You tried entering a name less than 2 characters!");
            flag = true;
        }
    } while (flag);
    return name;
}
</script>
</head>
<body>
<script type="text/javascript">

// DECLARATIONS
var numEmployees;
var employeeName;
var testName;


// INPUT
numEmployees = prompt("Enter the number of employees");

// PROCESSING
for (var index = 1; index <= numEmployees; index++)
{
    employeeName = prompt("Enter a name.");
    testName = inputName(employeeName);
}

// OUTPUT

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

3 回答 3

2

因为您没有在循环内提​​示输入新名称,所以名称永远不会改变,因此您会一遍又一遍地测试相同的字符串。

于 2013-11-12T18:22:31.963 回答
1

您没有使用for循环;那是一个do ... while循环。

问题是您将“标志”设置为true,但false在您循环并true再次设置之前将其设置为没有任何反应。如果函数以“名称”为空、数字或单字符串开始,则该循环将继续进行。

于 2013-11-12T18:22:20.070 回答
0

您需要提示用户更正名称。

var getName = function() {
    var name;

    do {
        name = prompt("Enter a name.");
    } while(!validateName(name));

    return name;
};

var validateName = function(name) {
    if (name == null) {
        alert("You have hit the 'Cancel' button!");
        return true;
    }

    if (name == "") {
        alert("You tried entering no name!");
        return false;
    }
    else if (!isNaN(name)) {
        alert("You tried entering a number!");
        return false;
    }
    else if (name.length < 2) {
        alert("You tried entering a name less than 2 characters!");
        return false;
    }

    return true;
};
于 2013-11-12T18:32:33.010 回答