views:

1438

answers:

5

The HTML standard for forms appears to be such that disabled input elements do not contribute to the form name/value collection.

Is there ANY way to get around this? I need to be able to toggle disable on and off but still return whatever the value is when the form is submitted.

I realize that I can use JavaScript to copy the value to a hidden input before the form is submitted, but I would prefer not to. Is there a cleaner way?

I'm using ASP.NET, not that that matters.

A: 

Can you use Visible=false and/or ReadOnly=true instead of Enabled=false?

If you are using the control, you shouldn't really set Enabled=false?

DrG
I'm not using the Enabled property that ASP.NET provides, just setting disabled "disabled" or not with JavaScript. Thanks for the contribution.
Setting Visible=False means the control won't even render to the page. There would be nothing to even check for input.
womp
+6  A: 

The HTML standard for forms appears to be such that disabled input elements do not contribute to the form name/value collection.

That is correct.

HACK: You could use Javascript to, upon submit:

  1. Unset disabled
  2. Set readonly
  3. Submit!
Wayne Khan
Brilliant, thanks. If I have to use Javascript, I'd prefer not to copy values around. This works in IE and FF at least. I'm still testing cross browser, but I'll give you the answer flag for now.
This is basically the only solution I can think of.
Rob
You could also use JavaScript to, on submit, add hidden input fields to the form for all the disabled elements and copy their values.
Miles
I'm sure my answer was accepted previously?
Wayne Khan
+2  A: 

As a slightly more robust variant of Wayne's hack (which might get confused by a Back button push), when disabling a control: set readonly= true and className= 'disabled' instead of disabled= true, then style .disabled to look similar to a disabled field.

bobince
Good idea, thanks bobince! :)
Wayne Khan
+4  A: 

You should use the readOnly flag rather than disabled. Read-only fields cannot be edited by the user, but are still submitted with the form.

<input type="text" value="blah" readOnly="true"/>
levik
A: 

If you make the value readonly, instead of disabling it, the field's name/value will be sent with the rest of the non-disabled fields.

Make the readonly fields' focus event handler pass the focus to the next eligible field, to make it act more like a disabled element. Some browsers let you focus and select readonly fields, and some even let you paste into a readonly field, though they revert to the original value onblur and onchange.

<input type="text" value="" readonly="readonly">
kennebec