如何用jquery.form ajaxSubmit包含提交值?

时间:2013-01-01 23:54:29

标签: jquery forms backbone.js jquery-forms-plugin

我有

的骨干视图

"submit": 'handleForms'

在其事件中哈希。

handleForms定义如下:

handleForms: function(e){
    $(e.target).ajaxSubmit({
        beforeSubmit: function(arr, $form, options){
            console.log('hello');
        }
    });
    return false;
},

我的一个表单有多个提交按钮:

<button type="submit" class="zone Empty" name="zone" value="14"> [14]: Empty </button>

“区域”未显示在提交给服务器的参数中。根据“成功控制”文档的第二个子弹(http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2),我希望发送zone = 14。

我已经看到了人们以编程方式提交表单的其他SO问题,因此缺少提交值,但这是用户启动时点击按钮。

jquery.form不应该在序列化中包含这个值吗?有没有办法让它这样做,或者我将不得不手工捕捉表格元素?

3 个答案:

答案 0 :(得分:2)

问题与jQuery serialize()方法有关,该方法在docs中说明:

  

注意:只有“成功控件”被序列化为字符串。没有提交按钮值被序列化,因为表单未使用按钮提交。

我认为他们的意思是说不是通过浏览器默认方法提交的

http://api.jquery.com/serialize/

您可以通过在表单中​​为每个提交附加隐藏字段来创建变通方法。

beforeSubmit: function(arr, $form, options) {
    $form.find(':submit').each(function() {
        /* check if hasn't been added already on prior submit attempt*/
        if(!$form.find('input[type="hidden"][name = "' + this.name + '"]').length) {
                /* add hidden field*/
            $form.prepend('<input type = "hidden" name = "' + this.name + '" value = "' + this.value + '" / > ');
        }
    })

}

编辑至仅发送已删除的按钮:

$('#formID :submit').click(function(){
     $('#formID :submit').removeClass('activeButton');
    $(this).addClass('activeButton');
})


beforeSubmit: function(arr, $form, options) {
        $form.find(':submit.activeButton').each(function() {
            /* check if hasn't been added already on prior submit attempt*/
            if(!$form.find('input[type="hidden"][name = "' + this.name + '"]').length) {
                    /* add hidden field*/
                $form.prepend('<input type = "hidden" name = "' + this.name + '" value = "' + this.value + '" / > ');
            }
        })

    }

答案 1 :(得分:1)

这个怎么样(不涉及beforeSubmit):

首先,对表单中的隐藏字段进行硬编码:

<input type="hidden" name="submitType" id="submitType">

然后,在js:

$form.on('click', "button[type='submit']", function() {
    $("#submitType").val(this.value);
});

答案 2 :(得分:0)

我针对此问题略有改进的代码段,如果它还不存在,会动态注入相应的input:hidden标记,然后从点击的button或{{1 }}。

该方法在执行时间上应该是安全的,因为在input:submit气泡到Submit之后会触发Click事件。

document