我已将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>
我该怎么做?
答案 0 :(得分:1)
我相信你的问题在于array('class' => 'login-form')
。
查看document.forms
的{{3}},您可以访问带有ID的表单。
我不熟悉代码点火器;但是,您的代码告诉我您可能正在为表单设置类。您需要为表单设置ID。
用于防止自动提交运行两次。从我看到的,我怀疑你最终获得了一个普通的HTML表单。当您提交HTML表单时,它将访问服务器,当它返回时,它应该重新加载页面(除非您将其设置为异步形式)。
由于页面正在重新加载,因此每次都会运行window.onload。为了防止这种情况,你必须使用一些真假标志。
以下是一些可能的解决方案:
<script>
块中,并从PHP中回显出一个脚本块。如果您使用此选项,则应使用documentation方法而不是直接访问onload
。通过使用$_GET
或$_POST
。<input type="hidden">
,然后使用JavaScript访问该值。一旦你可以使用你的旗帜,你只需要检查旗帜,以决定是否自动提交。
if (myFlag){
//submit form
}else{
//don't submit form
}
此true-false值不是敏感数据,因此将其作为GET参数放置应该是安全的。