我有一个使用jquery验证引擎和ajax的表单。我正在使用zend作为框架。但我有这个奇怪的情况。根据我的测试,我知道有3个案例,其中两个是正确的
1.当我填写所有输入表格后按Enter键,表格正常提交(一次)
2.当我在最后一个输入框中时,我按Tab键跳转到提交按钮,然后按回车键或单击它,表格也正常提交(一次)
3.但是在我填写完所有表格后,再填写验证码输入框(光标仍然在验钞码输入框中)并直接点击提交按钮而不将光标位置移动到其他元素,然后表格提交两次
我不明白为什么会这样。请帮我解决这个问题。
这是我的html代码:
<form id="kk_da" />
-- my form --
//here is the captcha
<div class="row">
<div class="col-md-12 col-lg-12">
<div class="mkk_form_captcha">
<span><strong>security code</strong>*</span>
<p>
<img src="<?php print $this->app->base_url ?>lib/captcha.php" id="captcha">
<br/><a href="#" onclick="" id="change-image"></a>
</p>
<p>
<a href="#" onclick="document.getElementById('captcha').src='<?php print $this->app->base_url ?>lib/captcha.php?'+Math.random();
return false" id="change-image">Not readable? Change text.</a>
</p>
<div class="mkk_field mkk_field_important <?php print $_cap ? 'mkk_field_alert' : ''; ?>
<?php if($this->error_captcha)print 'alert_captcha'; ?>">
<?php //print $this->form->getElement('captcha'); ?>
//the part above is described as follow
//and it happens that the ajax[ajaxCaptchaCall] is the problem
<input type="text" size="40" name="captcha" id="captcha"
class="validate[required,ajax[ajaxCaptchaCall]]" data-prompt-position="bottomRight"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-lg-12">
<div class="mkk_cart_buttons">
<input class="btn btn_blue" name="submit" type="submit" value="Buy" />
<input type="hidden" name="process_marker" value="process_order" />
<a href="<?php print $this->app->base_url ?>katalog/form" class="btn">back</a>
</div>
</div>
</div>
</form>
这里是javascript
> jQuery(document).ready(function()
{
jQuery("#kk_da").validationEngine('attach',
{
onValidationComplete: function(form, status)
{
if (status == true)
{
var formData = jQuery('#kk_da').serialize();
jQuery.ajax(
{
url : '<?php print $this->app->base_url ?>katalog/checkout_process',
type : 'POST',
data : formData,
beforeSend : function()
{
loading_pop();
}
}).done(function(data)
{
loading_done();
if (data== 'success')
{
window.location = '<?php print $this->app->base_url ?>katalog/success';
}
}).fail(function()
{
loading_done();
}) ;
}
}
});
});
更新 好像我遇到了问题。似乎“ajax [ajaxCaptchaCall]”部分是问题开始的地方。当我删除那部分时,我的表格正常提交。但后来它使我的验证码不起作用,因为它绕过它。我如何修复此部分,以便验证码工作,表单只提交一次?
答案 0 :(得分:0)
可能是附件被执行了两次吗? jQuery(“#kk_da”)。validationifyng('attach',....)
OD
尝试在序列化后设置form.status = false