开发者问题收集

未捕获的 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 代码中存在两个问题:

  1. 您已将函数命名为与您尝试调用的保留函数相同。
  2. 您的比较实际上是一个赋值

要解决第一个问题,只需将函数名称更改为其他名称,例如 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