jQuery: сериализация формы, скрытые поля и не отображаемые поля - PullRequest
8 голосов
/ 21 февраля 2012

Я использую $(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','');

и это решает мою проблему, кроме: скрытого селектора, принимает также type = "hidden"

как правильно?

Ответы [ 3 ]

21 голосов
/ 21 февраля 2012

Вам не нужно вызывать serialize() на самом <form>, вы можете сопоставить некоторые из его элементов управления и вызвать его в результирующем наборе. Это позволяет избежать манипуляций с атрибутами disabled.

Поскольку вы хотите, чтобы элементы управления соответствовали :hidden только в том случае, если они действительно предоставляют тип hidden, вы можете использовать следующий селектор:

$(this).find("input[type='hidden'], :input:not(:hidden)").serialize();
2 голосов
/ 29 августа 2017

Вы можете использовать $ form.find (': visible'). Serialize ()

0 голосов
/ 21 февраля 2012
var $disabled_list = $(this).find('input:hidden,select:hidden,textarea:hidden').not('input[type=hidden]').attr('disabled', 'disabled');

пробовал таким образом, и, кажется, работает

...