没有得到预期的结果 - 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抛出的工作原理。
感谢
答
好了,我的意见还是很重要,但我没有找到这个问题:你实际上不是指父母,为你需要一个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
这是一个相当复杂的方式来解释'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
你的try catch正在'if(window.top.calcFactorial == null)'是throwig错误 – ConfusedShark 2014-12-01 16:54:45
我将阅读提供的链接。谢谢你的帮助。 – 2014-12-01 17:07:39