window.onbeforeunload определяет, если POST или GET - PullRequest
3 голосов
/ 16 февраля 2009

В событии window.onbeforeunload есть способ определить, является ли новый запрос POST (на той же странице) или GET (переход на страницу)? Также было бы здорово увидеть новый document.location.

window.onbeforeunload = winClose;
function winClose() {
    //Need a way to detect if it is a POST or GET
    if (needToConfirm) {       
        return "You have made changes. Are you sure you want?";
    }
}

Ответы [ 2 ]

12 голосов
/ 23 июля 2009

Вот как я это сделал:

$(document).ready(function(){
  var action_is_post = false;
  $("form").submit(function () {
    action_is_post = true;
  });

  window.onbeforeunload = confirmExit;
  function confirmExit()
  {
    if (!action_is_post)
      return 'You are trying to leave this page without saving the data back to the server.';
  }
});
0 голосов
/ 16 февраля 2009

Похоже, что-то, что вам нужно прикрепить к форме, или конкретные ссылки. Если событие вызывается ссылкой и имеется строка запроса, полная переменных, оно будет действовать как GET. Если это форма, вам нужно проверить МЕТОД, а затем вычислить URL-адрес на основе данных, представленных в самой форме.

<a href="thisPage.php">No method</a>
<a href="thisPage.php?usrName=jonathan">GET method</a>
<form method="GET" action="thisPage.php">
  <!-- This is a GET, according to the method -->
  <input type="text" name="usrName" value="jonathan" />
</form>
<form method="POST" action="thisPage.php">
  <!-- This is a POST, according to the method -->
  <input type="text" name="usrName" value="jonathan" />
</form>

Таким образом, обнаружение будет происходить не в методе окна, а в методе клика по ссылкам и представлениям формы.

/* Check method of form */
$("form").submit(function(){
  var method = $(this).attr("method");
  alert(method);
});

/* Check method of links...UNTESTED */
$("a.checkMethod").click(function(){
  var isGet = $(this).attr("href").get(0).indexOf("?");
  alert(isGet);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...