jquery - form - Campos deshabilitados no recogidos por serializeArray
serialize table jquery (3)
(Pregunta actualizada para reflejar el problema real)
Acabo de darme cuenta de que serializeArray
no está recuperando contenido de los campos deshabilitados.
Un conjunto de campos de dirección (calle) se rellena seleccionando un elemento de una lista de autosuggest
. Una vez hecho esto, los campos están deshabilitados. Podría cambiar esto para que sea read only
, pero quiero que se vea y se sienta deshabilitado sin tener que cambiar CSS.
¿Hay alguna forma de que serializeArray
capture los datos de los campos deshabilitados?
Solución
Gracias a Mohammad, creé un pequeño complemento que me ayuda a resolver mi problema:
( Fiddle )
var form_data = $(''form'').serializeAll();
(function ($) {
$.fn.serializeAll = function () {
var data = $(this).serializeArray();
$('':disabled[name]'', this).each(function () {
data.push({ name: this.name, value: $(this).val() });
});
return data;
}
})(jQuery);
Prueba esto
var data = $(''form'').serializeAllArray();
Y aquí está el pequeño plugin que se usa.
(function ($) {
$.fn.serializeAllArray = function () {
var obj = {};
$(''input'',this).each(function () {
obj[this.name] = $(this).val();
});
return $.param(obj);
}
})(jQuery);
También puede intentar habilitar todos sus elementos solo para serializarlos y luego deshabilitarlos después de serializar.
var myform = $(''#form'');
var disabled = myform.find('':input:disabled'').removeAttr(''disabled'');
var serialized = myform.serializeArray();
disabled.attr(''disabled'',''disabled'');
puede usar readonly
serializeArray () puede leerlo.
$(''#field'').removeAttr(''disabled'');
var formData = $(this).serializeArray();
$(''#field'').attr(''disabled'', ''disabled'');
La solución anterior es mejor: alternativamente, puede eliminar el atributo deshabilitado del elemento, serializar los campos y luego volver a agregar el atributo.