未捕获的 RangeError:加载时超出最大调用堆栈大小
2015-07-04
1490
上一页有一个按钮,可重定向到此页面,但问题是页面加载时不显示确认框。我收到此错误
Uncaught RangeError: Maximum call stack size exceeded
页面代码:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
//script
<script type="text/javascript">
function confirm(){
var con = confirm("Are You Sure?");
if(con = true){
window.location = "delete.php";
}
else{
history.go(-1);
}
}
</script>
<body onload="confirm()">
</body>
</html>
3个回答
您的 javascript 代码中存在两个问题:
- 您已将函数命名为与您尝试调用的保留函数相同。
- 您的比较实际上是一个赋值
要解决第一个问题,只需将函数名称更改为其他名称,例如
confirmDeletion()
<script>function confirmDeletion() { /* do stuff */ }</script>
<body onload="confirmDeletion()">
要解决第二个问题,请更改比较。在 javascript 中,if 语句会自动将输入强制转换为布尔值,这意味着您实际上不需要将其与
true
进行比较。
if (con) {
/* do confirmed true stuff */
} else {
/* do confirmed false stuff */
}
以供将来参考,请确保始终使用三重等号
===
进行比较,否则您将得到意外行为。
Strikeskids
2015-07-04
您总是会返回前 1 页,因为您没有正确评估条件。
if (con = true) {
window.location = "delete.php";
}
应该是
if (con == true) {
window.location = "delete.php";
}
请注意附加的
=
,
=
是赋值运算符,而
==
用于比较和评估条件。
Darren
2015-07-04
尝试将您的函数从
confirm
重命名为其他名称。问题是,通过在
confirm
函数内调用
confirm
,您将陷入无限循环。
例如,这将起作用,因为我已将
confirm
重命名为
myConfirm
:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
//script
<script type="text/javascript">
function myConfirm(){
var con = confirm("Are You Sure?");
if(con = true){
window.location = "delete.php";
}
else{
history.go(-1);
}
}
</script>
<body onload="myConfirm()">
</body>
编辑
同时将
con = true
更改为
con == true
,以检查
con
是否为真,而不是为其分配值
true
。
winhowes
2015-07-04