自动提交表单一次
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.forms
的 documentation,您可以使用 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 参数放置应该是安全的。
我已将 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.forms
的 documentation,您可以使用 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 参数放置应该是安全的。