It seems by default disabled input elements are ignored by $.serialize(). Is there a workaround?
Temporarily enable them.
var myform = $('#myform');
// Find disabled inputs, and remove the "disabled" attribute
var disabled = myform.find(':input:disabled').removeAttr('disabled');
// serialize the form
var serialized = myform.serialize();
// re-disabled the set of inputs that you previously enabled
disabled.attr('disabled','disabled');
Use readonly inputs instead of disabled inputs:
<input name='hello_world' type='text' value='hello world' readonly />
This should get picked up by serialize().
You can use a proxied function (it affects both $.serializeArray() and $.serialize()):
(function($){
var proxy = $.fn.serializeArray;
$.fn.serializeArray = function(){
var inputs = this.find(':disabled');
inputs.prop('disabled', false);
var serialized = proxy.apply( this, arguments );
inputs.prop('disabled', true);
return serialized;
};
})(jQuery);