나는이 예제를 책에서 따르고 있지만 책에 표시된 것과 같은 결과를 얻지는 않습니다.예상되는 결과를 얻지 못했습니다 - javascript
2 개의 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'가 어떻게 작동하는지 설명하는 것은 상당히 복잡한 방법입니다! 이 결과를 얻는 이유는'window.top.calcFactorial' _ is_'null'이기 때문에 예외는'try' 문에'throw'n되어'catch'에 출력 (또는 _referring_)됩니다. 실제로 iFrames가 부모의 자바 스크립트 함수에 액세스 할 수 있다고 생각하지 않으므로 분명 'null'입니다. 'try ... catch'에 대한 좋은 설명을 보려면 MDN을 확인하십시오. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try..catch – somethinghere
시험 잡기 'if (window.top.calcFactorial == null)'이 (가) throw12 오류 인 경우 – ConfusedShark
으로 작업하고 있습니다. 제공된 링크를 읽어야합니다. 당신의 도움을 주셔서 감사합니다. –