在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?";
}
}
答案 0 :(得分:12)
这就是我刚刚做到的:
$(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.';
}
});
答案 1 :(得分:0)
听起来像是需要附加到表单或特定链接的内容。如果事件是由链接引发的,并且有一个充满变量的请求字符串,它将充当GET。如果是表单,则必须检查METHOD,然后根据表单中提交的数据确定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>
因此检测不会在窗口方法中进行,而是在链接的click方法和表单提交中进行。
/* 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);
});