jQuery:表单序列化,隐藏字段,而不是显示字段

时间:2012-02-21 10:21:00

标签: jquery forms serialization hidden

我在提交表单时使用$(this).serialize()

它运作良好,除非我(由于某种原因)有2个具有相同名称的字段(一个可见,一个不可以,我不是在谈论type="visible"而是display:none)。 ..

但当然serialize不考虑这个......它只需要它们。

我试过这个

var $disabled_list = $(this).find('input:hidden,select:hidden,textarea:hidden').attr('disabled', 'disabled');
$(this).serialize();
$disabled_list.attr('disabled','');

它正在解决我的问题,除了:隐藏选择器,也需要输入="隐藏"

什么是正确的方式?

3 个答案:

答案 0 :(得分:21)

您无需在serialize()本身上调用<form>,您可以匹配其中的某些控件并在结果集上调用它。这样可以避免修改disabled属性。

由于您希望控件只有在实际公开:hidden类型时才匹配hidden,您可以使用以下选择器:

$(this).find("input[type='hidden'], :input:not(:hidden)").serialize();

答案 1 :(得分:2)

您可以使用$ form.find(':visible')。serialize()

答案 2 :(得分:0)

var $disabled_list = $(this).find('input:hidden,select:hidden,textarea:hidden').not('input[type=hidden]').attr('disabled', 'disabled');

尝试这种方式似乎有效