2012-02-21 23 views
7

Podczas przesyłania formularza używam $(this).serialize().jQuery: formularz szereguj, ukryj pola i nie wyświetlaj pól

To działa dobrze, z wyjątkiem w czasach, kiedy (z jakiegoś powodu) posiada 2 pola o tej samej nazwie (jeden widoczny i nie, a ja nie mówię o type="visible" ale display:none) ...

Ale oczywiście serialize nie ma względu na to ... po prostu je wszystkie.

Próbowałem to

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

i jest to rozwiązanie mojego problemu, z wyjątkiem: ukryty przełącznik, bierze również type = "hidden"

jaka jest właściwa droga?

Odpowiedz

18

Nie musisz zadzwonić serialize() na <form> się, można dopasować niektóre jego kontroli i nazwać na wynikającym z zestawu. Pozwala to uniknąć majsterkowania z atrybutami disabled.

Ponieważ chcesz kontrole dopasowanie :hidden tylko wtedy, gdy także faktycznie narazić typ hidden, można użyć następującego selektora:

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

dzięki, lepsze rozwiązanie niż moje –

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

próbował w ten sposób i wydaje się działać

2

Można użyć $ form.find ('visible'). Serialize ()