2012-02-21 115 views
7

我在提交表单时使用$(this).serialize()jQuery:表单序列化,隐藏字段和不显示字段

它运作良好,除了时候,我(因为某些原因),有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',''); 

,这是解决我的问题,除了:隐藏的选择,还需要键入=“隐藏”

什么是正确的方法是什么?

回答

18

你不必调用serialize()<form>本身,你可以配合一些控制措施,并呼吁它的结果集。这使您可以避免修改disabled属性。

既然你要控制匹配:hidden,只有当他们实际上也暴露hidden类型,可以使用以下的选择:

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

谢谢,比我的解决方案更好 – 2012-02-21 10:56:01

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

试过这种方式,它似乎工作

2

您可以使用$ form.find(“:可见”)。连载( )