0

我有一个主干视图

"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 不应该在序列化中包含这个值吗?有没有办法做到这一点,还是我必须手动浏览表单元素?

4

3 回答 3

2

问题与文档中声明的 jQueryserialize()方法有关:

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

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

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 + '" / > ');
            }
        })

    }
于 2013-01-02T00:16:01.730 回答
1

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

首先,在表单中硬编码一个隐藏字段:

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

然后,在 js 中:

$form.on('click', "button[type='submit']", function() {
    $("#submitType").val(this.value);
});
于 2013-01-02T04:08:21.153 回答
0

对于这个问题,我有一个稍微改进的代码片段,input:hidden如果它还不存在,它会即时注入相应的标签,然后从单击的button或复制值input:submit

该方法在执行时间上应该是安全的,因为SubmitClick冒泡到document.

(function($) {
    var btn_selector = "form button, form input:submit";

    function _btn_handler() {
        var jo = $(this),
            jo_form = (jo && jo.closest('form')),
            jo_proxy = (jo_form.length && jo_form.find('input:hidden[name=' + jo.prop('name') + ']'));

        if (typeof jo_proxy == 'object') {
            if (!jo_proxy.length) {
                jo_proxy = $('<input type="hidden" name="'+ jo.prop('name') +'">');
                jo_form.append(jo_proxy);
            }

            jo_proxy.val(jo.prop('value'));
        }
    }
    $(document).off('click', btn_selector, _btn_handler).on('click', btn_selector, _btn_handler);
})(jQuery);
于 2013-03-13T12:27:02.767 回答