没有得到预期的结果 - javascript

问题描述:

我从一本书中看到了这个例子,但是我没有得到和本书相同的结果。没有得到预期的结果 - 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> 

我不断收到错误 “此页不正确的框架中加载”。

本书中练习的目的是为了展示try catch抛出的工作原理。

感谢

+2

这是一个相当复杂的方式来解释'try ... catch'是如何工作的!你得到这个结果的原因是因为'window.top.calcFactorial' _is_'null',所以'try'语句中的'throw'n异常,将它输出(或_referring_)到'catch'。我其实不认为iFrames可以访问他们父母的javascript函数,所以它显然是'null'。对于'try ... catch'的一个很好的解释,查看MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try.catch – somethinghere 2014-12-01 16:53:45

+0

你的try catch正在'if(window.top.calcFactorial == null)'是throwig错误 – ConfusedShark 2014-12-01 16:54:45

+0

我将阅读提供的链接。谢谢你的帮助。 – 2014-12-01 17:07:39

好了,我的意见还是很重要,但我没有找到这个问题:你实际上不是指父母,为你需要一个iframe。下面的代码更改:

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

这样:

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

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

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

+0

谢谢。这解决了这个问题。是的,我同意这本书似乎是用旧的方法做事。 – 2014-12-01 17:07:01