自动提交表单一次

Auto Submit form just once

我已将 javascript 代码配置为自动提交,但我想要的是如果身份验证失败,我不会再次执行自动提交。 我的代码如下:

表格:

<?php echo form_open($this->uri->uri_string(), array('class' => 'login-form')); ?>
    <div class="form-group">

                    <label for="email"><?php echo _l('clients_login_email'); ?></label>

                    <input type="text" autofocus="true" class="form-control" name="email" id="email">

                    <?php echo form_error('email'); ?>

                </div>

                <div class="form-group">

                    <label for="password"><?php echo _l('clients_login_password'); ?></label>

                    <input type="password" class="form-control" name="password" id="password">

                    <?php echo form_error('password'); ?>

                </div>
<?php echo form_close(); ?>

Javascript

<script type="text/javascript">
    window.onload=function(){
        var auto = setTimeout(function(){ autoRefresh(); }, 100);

        function submitform(){
            document.forms["login-form"].submit();
        }

        function autoRefresh(){
            clearTimeout(auto);
            auto = setTimeout(function(){ submitform(); autoRefresh(); }, 10000);
        }
    }
</script>

我该怎么做?

我认为你的问题出在array('class' => 'login-form')

查看 document.formsdocumentation,您可以使用 ID 访问表单。

我不熟悉code-igniter;但是,您的代码告诉我您可能正在为表单设置 class 。您需要为表单设置 ID。


用于防止 auto-submit 两次 运行ning。据我所知,我怀疑您最后得到的是正常的 HTML 表格。当您提交 HTML 表单时,它会访问服务器,当它返回时应该重新加载页面(除非您将其设为异步表单)。

由于页面正在重新加载,window.onload 每次都是 运行。为了防止这种情况,您必须在某些地方使用 true-false 标志。

以下是一些可能的解决方案:

  • 您可以尝试从 JavaScript 访问 url 参数。一些快速搜索表明这比我预期的要复杂得多...
  • 或者,您可以将 JavaScript 代码移动到 <script> 块中,然后从 PHP 回显脚本块。如果您要使用此选项,您应该考虑使用 addEventListener 方法而不是直接访问 onload。 PHP 将使使用 $_GET$_POST.
  • 访问 URL 参数变得容易得多
  • 第二种选择是回显保存 true/false 值的 <input type="hidden">,然后使用 JavaScript.
  • 访问该值

一旦你可以使用你的旗帜,你只需要检查旗帜以决定是否auto-submit。

if (myFlag){
    //submit form
}else{
    //don't submit form
}

此 true-false 值不是敏感数据,因此将其作为 GET 参数放置应该是安全的。