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



我创建了这个脚本来提醒用户他们没有完成表单就离开了页面。当用户单击提交按钮时,脚本将被忽略。不幸的是,在我正在工作的网站上,一个新的页面没有加载表单提交,只是一个感谢信息出现在同一页面上(因此,在这一点上点击的任何链接仍然给出警告消息)。所以我希望做的是-取消这个脚本在表单提交。有人有什么想法吗?(语法请!)-我只有脚本级别的访问权限,我不能直接编辑提交按钮。

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

解决这个问题的一个方法是稍微改变一下你的策略。

您假设页面的访问者总是完成表单。然而,至少有一种情况下这是不正确的:在提交表单并重新加载页面后,这不再是正确的(现在是对页面的新访问,用户这次不会完成表单,因为它已经完成了)。

因此,改变你的策略,使消息默认为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

此指令必须位于每个使用$_SESSION变量的 PHP页面的顶部。

现在,您应该使用$_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?';
        }
    }

解释上面的代码:

  • 如果用户以前从未访问过该页面,则会话变量不存在。在这种情况下,创建它并将value设置为0。

  • PHP变量不能从jQuery访问(除非你使用ajax)。因此,在完成页面输出之前,添加一个隐藏的输入字段,用于存储PHP变量的值。jQuery/javascript可以访问隐藏字段的值,瞧!

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

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

在这里阅读更多关于$_SESSION变量的信息:

TiZag on Sessions

DevShed会话

Inside Sessions

会话变量解释

没有文件访问,这是无法完成的。使用focus()绑定输入字段是最好的解决方案。

相关内容

  • 没有找到相关文章

最新更新