我创建了此脚本,以提醒用户他们离开页面而未填写表单。当用户单击提交按钮时,将忽略该脚本。不幸的是,在我正在处理的网站上,表单提交时未加载新页面,只有感谢信息出现在同一页面上(因此在该点点击的任何链接仍会显示警报消息)。所以我希望做的是 - 在表单提交上取消此脚本。任何人的想法? (语法请!) - 我只有SCRIPT级访问权限,我无法直接编辑提交按钮。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(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 'Are you sure you want to leave this page?';
}
});
</script>
答案 0 :(得分:1)
解决这个问题的方法之一是改变你的策略。
您假设网页访问者始终填写表单。但是,如果不是这样,至少有一个实例:在提交表单并重新加载页面之后,这不再是真的(现在是对页面的新访问,用户将无法完成此表单时间,因为它已经完成了。)
因此,更改策略以便默认情况下将消息设置为OFF,并且只有在用户执行以下操作时才启用此消息:(a)单击任何表单字段(.focus()
事件),(b)离开表单字段(.blur()
事件),(c)更改元素(.change()
事件)的内容等。
示例:强>
<script>
var exit_message = false; //outside of document.ready
$(document).ready(function(){
window.onbeforeunload = confirmExit;
$('.formField').focus(function(){
exit_message = true;
});
$("form").submit(function () {
exit_message = false;
});
}); //END document.ready
function confirmExit() {
if (exit_message)
return 'Are you sure you want to leave this page?';
}
}
</script>
对于上面的示例,请注意,至少有一个表单字段(或所有,如果您愿意)应该具有类 formField 。例如:
<input id="first_name" class="formField" type="text" />
进一步的想法(回应评论):
如果您需要记住最后一页交互的状态(例如,用户已经提交了表单,并且您希望记住每次以后的页面交互),您可以使用PHP $_SESSION
超级 - 全局变量。
$ _ SESSION是一个数组变量,您可以为其创建新的关联元素。它是特殊,因为(a)它内置于PHP中,(b)它对于页面的每个访问者都是唯一的。
要使用此超全局,您必须通过将session_start();
放在脚本的最顶部来启用它。通常,session_start()
必须出现在其他任何内容之前,当然在将任何数据/标头输出到页面之前。像这样:
<?php
session_start();
//carry on as usual
此指令必须位于每个 PHP页面的顶部,该页面将使用$ _SESSION变量。
现在,您应该使用$ _SESSION变量,而不是使用全局变量(例如 $ exit_message = 1 )。我们称之为“form_submitted”:
<强> PHP:强>
<?php
session_start();
//Note: you may have to use == false /or/ === false... Please test/research
if ( !isset($_SESSION['form_submitted']) ){
$_SESSION['form_submitted'] = 0;
}
if ( $_SESSION['form_submitted'] == 0 ) {
echo '<input type="hidden" id="stored_state" value="0" />';
}
jQuery / javascript :
function confirmExit() {
if ( $('#stored_state').val() == 0 )
return 'Are you sure you want to leave this page?';
}
}
解释上述代码:
如果用户之前从未访问过该页面,则会话var将不存在。在这种情况下,创建它并将值设置为零。否则,该值将是它最后设置的值。
无法从jQuery访问PHP变量(除非您使用ajax)。因此,在完成输出页面之前,添加一个隐藏的输入字段,用于存储PHP变量的值。 jQuery / javascript可以访问隐藏字段的值,瞧!您可以在脚本中使用PHP变量的值。
注意:在表单处理中,(我相信你提到的PHP页面的顶部),你应该切换var值。也就是说,表格提交后:
<?php
//At the part where you deal with the form submission data:
$_SESSION['form_submitted'] = 1;
在此处详细了解$_SESSION
变量:
答案 1 :(得分:0)
没有文件访问权限就无法完成。使用focus()绑定到输入字段是最佳解决方案。