How do I make $.serialize() take into account those disabled :input elements?
Temporarily enable them.
var myform = $('#myform'); // Find disabled inputs, and remove the "disabled" attributevar disabled = myform.find(':input:disabled').removeAttr('disabled'); // serialize the formvar serialized = myform.serialize(); // re-disabled the set of inputs that you previously enableddisabled.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);