两个AJAX表单提交,一个不起作用

时间:2013-05-29 11:37:53

标签: jquery ajax

我使用ajax允许我提交两种表格。

我在同一页面上有一个添加到购物车和更新购物车表单。

我使用以下代码触发添加到购物车或更新购物车提交。

$('#cart-container').on('submit','form',function() {
    $(this).ajaxSubmit({
        success: cart
    }); 
    return false; 
});

function cart() {
    var path = '/enter/embed-cart';
    $('#cart-container').fadeTo('fast', 0.5).load(path, function() {
        $('#cart-container').fadeTo('fast', 1);
    }); 
}

我已经在禁用了ajax的情况下对这两种表单进行了测试,并且它们运行良好,所以我知道表单工作正常。

使用该脚本,添加到购物车表单工作正常,但更新表单不提交。奇怪的是函数cart()正在运行,但是当load()完成时,表单尚未更新。我想知道div中是否有两个表单#cart-container意味着它只针对第一个(添加到购物车表单),但为什么它仍会运行更新表单的提交?

有人能看出为什么会这样吗?

这是精简的HTML。这些表格不太合理,因为它们来自CMS。

<div id="cart-container" class="divide clearfix">
    <div id="purchase-submissions" class="grid col-12 bp2-col-6">

        <form method="post" action="/enter"  >
            <input type="submit" value="Add" class="cart-btn add-item">
        </form>

    </div> <!-- End of .grid -->

    <div id="cart" class="grid col-12 bp2-col-6">

        <form method="post" action="/enter"  >

            Update form details

        </form> 

    </div> <!-- End of .grid -->

</div> <!-- End of #cart-container-->

谢谢

3 个答案:

答案 0 :(得分:1)

表单在正常提交时更新的原因是因为您正在刷新页面上的内容(表单),您需要将表单放在div中并从该div中发布,然后刷新该div看到相同的结果。当ajaxForm在幕后提交内容时,它不会为您“更新”表单。为了实现这一点,我将表单和脚本放在一个页面中,将其调用到容器div中,然后在该div中进行提交并刷新div。查看ajaxForm“目标”方法。

来自Malsup网站:

//在DOM准备好时准备表单 $(document).ready(function(){     var options = {         target:'#output2',//要用服务器响应更新的目标元素         beforeSubmit:showRequest,//预提交回调         success:showResponse // post-submit callback

    // other available options: 
    //url:       url         // override for form's 'action' attribute 
    //type:      type        // 'get' or 'post', override for form's 'method' attribute 
    //dataType:  null        // 'xml', 'script', or 'json' (expected server response type) 
    //clearForm: true        // clear all form fields after successful submit 
    //resetForm: true        // reset the form after successful submit 

    // $.ajax options can be used here too, for example: 
    //timeout:   3000 
}; 

// bind to the form's submit event 
$('#myForm2').submit(function() { 
    // inside event callbacks 'this' is the DOM element so we first 
    // wrap it in a jQuery object and then invoke ajaxSubmit 
    $(this).ajaxSubmit(options); 

    // !!! Important !!! 
    // always return false to prevent standard browser submit and page navigation 
    return false; 
}); 

});

如果您需要我创建一个实际示例,请告诉我。

答案 1 :(得分:0)

曾考虑使用jQuery Forms Plugin吗?它肯定会让你免于手动做这些事情。

答案 2 :(得分:0)

你需要在表单上有id,我会有一个单独的jquery调用,每个基本的各自我。您正在尝试提交div。

您也可以尝试调用'#cart-container form',因为提交需要绑定到表单。