我有一个表单,其中包含几个div中的元素。
根据下拉列表,其中一些div可能会隐藏,而某些div会显示。
我希望使用可见的元素序列化表单,而不是隐藏的div。
有什么方法可以过滤掉那些隐藏的div。
尝试了这个但不起作用
$('<tr />').data($(this).find('form:not(.child:hidden)').serializeObject());
serializeObject是一个将serializeArray转换为Object的插件。
答案 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();
然后序列化表单。