2012-02-21 5 views
7

Sto usando $(this).serialize() quando si invia un modulo.jQuery: form serial, campi nascosti e campi non visualizzati

Funziona bene, tranne nei momenti in cui ho (per qualche motivo) ho 2 campi con lo stesso nome (quello visibile, e non uno, e non sto parlando di type="visible" ma display:none) ...

Ma ovviamente serialize non ha riguardo per questo ... li prende tutti.

Ho provato questo

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

e Si è risolvere il mio problema, tranne il: selettore di nascosto, prende anche digitare = "hidden"

qual è il modo corretto?

risposta

18

Non c'è bisogno di chiamare serialize() sul <form> in sé, è possibile abbinare alcuni dei suoi controlli e lo chiamano sul set risultante. Ciò consente di evitare di armeggiare con gli attributi disabled.

Dal momento che si desidera controlli corrispondenti :hidden solo se anche in realtà espongono il tipo hidden, è possibile utilizzare il seguente selettore:

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

grazie, soluzione migliore della mia –

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

provato in questo modo e sembra funzionare

2

È possibile utilizzare $ form.find (': visibile'). Serializzare ()