2015-07-04 5 views
2

У меня есть кнопка на предыдущей странице, которая перенаправляется на эту страницу, но проблема в том, когда страница загружается, но не отображается окно подтверждения. Я получаю эту ошибкуUncaught RangeError: Максимальный размер стека вызовов превышен onload

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> 

ответ

1

Вы всегда будете возвращаться на одну страницу, потому что вы не правильно оцениваете свое состояние.

if (con = true) { 
    window.location = "delete.php"; 
} 

Должно быть

if (con == true) { 
    window.location = "delete.php"; 
} 

Обратите внимание на дополнительные =, = является оператором присваивания и == используется для сравнения и оценки состояния.

+0

О, да, я забыл ... он теперь работает, спасибо ... –

0

Попробуйте переименовать вашу функцию от 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> 

Edit

изменить Также con = true на con == true, чтобы проверить, если con верно, а не назначая его значение true.

+0

я переименовал его ошибка не приходит, но страница перезагрузки снова и снова –

+0

я добавил редактирования, который должен исправить другую «ошибку», которая вызывает перезагрузку страницы. – winhowes

2

У вас есть две проблем в вашем яваскрипте кода:

  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 */ 
} 

Для дальнейшего использования, убедитесь, что всегда использовать тройной равный === знак для сравнения, в противном случае вы получите неожиданное поведение.

+0

yeah ... спасибо за совет –

+0

Если вы нашли мое сообщение полезным, вы могли бы его отстоять или отметить как ответ. – Strikeskids

0

Измените название функции. Условие, if(con = true), присваивает истинное значение con. Вы должны сравнивать значение правды, например if(con). Вы должны делать,

<script type="text/javascript"> 

    function confirmNavigation(){ 

     var con = confirm("Are You Sure?"); 

      if(con){ 
       window.location = "delete.php"; 

      } 

     else{ 

      history.go(-1); 

    } 
     } 

</script> 
Смежные вопросы