Jquery-如何在表单提交时停止此脚本

Jquery-如何在表单提交时停止此脚本,jquery,forms,submit,Jquery,Forms,Submit,我创建此脚本是为了提醒用户他们将在未完成表单的情况下离开页面。当用户单击“提交”按钮时,脚本将被忽略。不幸的是,在我工作的网站上,表单提交中没有加载新页面,只有一条感谢信息出现在同一页面上(因此,在该点单击的任何链接仍会发出警告信息)。所以我希望做的是取消表单提交中的脚本。有什么想法吗??(请使用语法!)-我只有脚本级访问权限,无法直接编辑“提交”按钮 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/

我创建此脚本是为了提醒用户他们将在未完成表单的情况下离开页面。当用户单击“提交”按钮时,脚本将被忽略。不幸的是,在我工作的网站上,表单提交中没有加载新页面,只有一条感谢信息出现在同一页面上(因此,在该点单击的任何链接仍会发出警告信息)。所以我希望做的是取消表单提交中的脚本。有什么想法吗??(请使用语法!)-我只有脚本级访问权限,无法直接编辑“提交”按钮

    <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>

$(文档).ready(函数(){
var action_is_post=false;
$(“表格”)。提交(函数(){
动作_is _post=真;
});
window.onbeforeunload=确认退出;
函数confirmExit()
{
如果(!操作\u是\u post)
return“您确定要离开此页面吗?”;
}
});

一种解决方法是稍微改变一下策略

您假设该页面的访问者将始终填写表单。但是,至少有一种情况是不正确的:在提交表单并重新加载页面后,这种情况不再正确(现在是对页面的新访问,用户这次不会完成表单,因为表单已经完成)

因此,请更改策略,使消息在默认情况下处于关闭状态,并且仅当用户执行以下操作时才将其打开:(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>
<?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" />';
    }
此指令必须位于将使用$\u会话变量的每个PHP页面的顶部

现在,您应该使用$会话变量,而不是使用全局变量(例如$exit\u message=1)。我们称之为“提交的表格”:

PHP:

<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>
<?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访问PHP变量(除非使用)。因此,在完成输出页面之前,添加一个隐藏的输入字段来存储PHP变量的值。jQuery/javascript可以访问隐藏字段的值,瞧!您的脚本可以使用PHP变量的值

注意:在表单处理中(我相信您提到的PHP页面顶部),应该切换var值。也就是说,在提交表格时:

<?php
    //At the part where you deal with the form submission data:
    $_SESSION['form_submitted'] = 1;

如果没有文件访问权限,则无法执行此操作。使用focus()绑定输入字段是最好的解决方案。

谢谢,我会尝试一下。这很好,但无法解决有人不触摸表单并试图离开页面的问题。我怎样才能添加它呢???谢谢,但是…不幸的是,正如我在原始问题中提到的,我只有脚本级别的访问权限。这是一个CMS(blackbaud),我没有php访问权限(此外,它是一个aspx页面)。不管怎样,我都可以专注于整个身体。第一个答案非常接近,我只需要添加忽略整个表单的功能…抱歉,我将澄清:如果:没有数据进入和离开页面,或者一些数据进入和离开页面,用户应该得到警告。一旦点击提交按钮,警报将不再发生(页面仅显示您在表单上输入的内容,新页面不会在提交时加载,所以在点击提交后,用户可以查看他们提交的内容,并可以自由离开)——感谢您的帮助,我真的非常感谢!这么多人坚持了!重新读取OP,如果您使初始var值
显示退出消息
,然后仅在按下submit按钮时关闭该消息,则始终会要求用户填写表单。那么,这样做如何:在表单处理PHP代码中,设置一个隐藏字段,以注意表单现在已经完成。(此字段应始终存在,但仅在填写表单时包含“1”)。然后,confirm_exit()fn可以访问它来确定是否显示提示。
<?php
    //At the part where you deal with the form submission data:
    $_SESSION['form_submitted'] = 1;