php jquery ajax表单提交两次

时间:2013-11-29 08:43:54

标签: php jquery ajax forms submit

我有一个使用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]”部分是问题开始的地方。当我删除那部分时,我的表格正常提交。但后来它使我的验证码不起作用,因为它绕过它。我如何修复此部分,以便验证码工作,表单只提交一次?

1 个答案:

答案 0 :(得分:0)

可能是附件被执行了两次吗? jQuery(“#kk_da”)。validationifyng('attach',....)

OD

尝试在序列化后设置form.status = false