自动提交表单一次

时间:2018-03-26 13:49:58

标签: javascript codeigniter form-submit

我已将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>

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我相信你的问题在于array('class' => 'login-form')

查看document.forms的{​​{3}},您可以访问带有ID的表单。

我不熟悉代码点火器;但是,您的代码告诉我您可能正在为表单设置类。您需要为表单设置ID。

用于防止自动提交运行两次。从我看到的,我怀疑你最终获得了一个普通的HTML表单。当您提交HTML表单时,它将访问服务器,当它返回时,它应该重新加载页面(除非您将其设置为异步形式)。

由于页面正在重新加载,因此每次都会运行window.onload。为了防止这种情况,你必须使用一些真假标志。

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

  • 您可以尝试从JavaScript访问url参数。一些快速搜索表明,这比我预期的要复杂得多......
  • 或者,您可以将JavaScript代码移动到<script>块中,并从PHP中回显出一个脚本块。如果您使用此选项,则应使用documentation方法而不是直接访问onload。通过使用$_GET$_POST
  • ,PHP可以更轻松地访问网址参数
  • 第二种方法是回显一个包含true / false值的<input type="hidden">,然后使用JavaScript访问该值。

一旦你可以使用你的旗帜,你只需要检查旗帜,以决定是否自动提交。

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

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