序列化表单但有些元素

时间:2012-06-27 05:50:00

标签: jquery forms

我有一个表单,其中包含几个div中的元素。

根据下拉列表,其中一些div可能会隐藏,而某些div会显示。

我希望使用可见的元素序列化表单,而不是隐藏的div。

有什么方法可以过滤掉那些隐藏的div。

尝试了这个但不起作用

$('<tr />').data($(this).find('form:not(.child:hidden)').serializeObject());

serializeObject是一个将serializeArray转换为Object的插件。

2 个答案:

答案 0 :(得分:5)

假设在您的上下文中this<form>,请尝试以下操作:

var data = $(':input:visible', this).serialize();
$('<tr />').data(data);

这是一个live demo

答案 1 :(得分:1)

如果您disable使用了未使用的表单元素,则不会随表单一起提交。这可能是最简单/最快捷的解决方案。

根据之前关于SO的问题,我在本地扩展中定义了这些:

/* 
    Extension methods to quickly enable/disable form elements 
    @@see http://stackoverflow.com/questions/625109/jquery-script-load-timing/625126#625126
*/
$.fn.disable = function() {
    return this.each(function() {
        if (typeof this.disabled != "undefined") this.disabled = true;
    });
}

$.fn.enable = function() {
    return this.each(function() {
        if (typeof this.disabled != "undefined") this.disabled = false;
    });
}

所以,你可以这样做:

$('.hidden-div-class').disable();

然后序列化表单。