没有得到预期的结果 - JavaScript

时间:2014-12-01 16:49:39

标签: javascript

我在一本书中关注这个例子,但我没有得到书中所示的相同结果。

两个HTML页面。

calcfactorialtopframe.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <script type="text/javascript">

    function calcFactorial(factorialNumber) {

        var factorialResult = 1;

        for (; factorialNumber > 0; factorialNumber--) {
            factorialResult = factorialResult * factorialNumber;
        }

        return factorialResult;

    }

    </script>
</head>

<body>

<frameset cols="100%,*">
    <frame name="fraCalcFactorial" src="calcfactorial.html"></frame>
</frameset>

</body>
</html>

calcfactorial.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <script type="text/javascript">

        function butCalculate_onclick() {
            try {

                if (window.top.calcFactorial == null) {
                    throw "This page is not loaded within the correct frameset";
                };

                if (document.form1.txtNum1.value == "") {
                    throw "!Please enter a value before you calculate its factorial";
                };

                if (isNaN(document.form1.txtNum1.value)) {
                    throw "!Please enter a valid number";
                };

                if (document.form1.txtNum1.value < 0) {
                    throw "!Please enter a positive number";
                };

                document.form1.txtResult.value = window.parent.calcFactorial(document.form1.txtNum1.value);
            }
            catch (exception) {
                if (typeof(exception) == "string") {

                    if (exception.charAt(0) == "!") {

                        alert(exception.substr(1));
                        document.form1.txtNum1.focus();
                        document.form1.txtNum1.select();

                    } else {
                        alert(exception);
                    }

                } else {
                    alert("The following error occurred " + exception.message);
                }
            }
        }
    </script>
</head>
<body>

    <form action="" name="form1">

        <input type="text" name="txtNum1" size="3" /> factorial is
        <input type="text" name="txtResult" size="25" /><br />
        <input type="button" value="Calculate Factorial" name="butCalculate" onclick="butCalculate_onclick()" />

    </form>

</body>
</html>

我一直收到错误“此页面未加载到正确的框架集中”。

本书练习的目的是展示尝试捕捉投掷的方式。

由于

1 个答案:

答案 0 :(得分:0)

好的,我的评论仍然非常相关,但我确实发现了问题:你实际上并没有提到父母,因为你需要一个iframe。更改以下代码:

<frameset cols="100%,*">
    <frame name="fraCalcFactorial" src="calcfactorial.html"></frame>
</frameset>

到此:

<iframe name="fraCalcFactorial" src="calcfactorial.html"></iframe>

现在window.top可以访问子框架了!我会说实话,我不确定为什么这是因为我对框架集的了解非常有限,而且我忘记了多年前如何访问它们。

但严重的是,如果它教你使用<frameset>来做事情,这听起来不是一本好书......我近20年来没见过那些!您最好的朋友和资源是Mozilla Developer Network。我发现他们的代码得到了很好的解释,它包含了大量现代的,最新的网络!