views:

50

answers:

2

I'm using jQuery to add a readonly attribute to all form elements but can't seem to figure out how to do this.

Here is what I'm trying:

$('#form1').each( function() { $(this).attr('readonly', true); });

I have a simple form using label/input to display form elements. Also I'm using tipsy (Tool tip plug-in) as well as Formalize (Look and Feel Plug-in)

+4  A: 

Try this:

$('#form1 input').attr('readonly', 'readonly');
  • You may want to include more elements #form1 input, #form1 textarea, #form1 select
  • In jQuery, you usually don't need to iterate over the collection. attr would work for a collection same as for a single element.
  • In your case, #form1 matched just the <form> element, and each was triggered once, for that element. To find all elements (input or not), you can write #form1 *.
Kobi
just a technicality, but "attr('readonly', true)" is better than "attr('readonly', 'readonly'). jQuery's "attr()" method operates on DOM properties, not actual HTML attributes, and the property value for "readonly" must be either "true" or "false". It just so happens that 'readonly' casts to true in javascript, but it's better to include the boolean to start with.
Ben Lee
hmm still no luck
Phill Pafford
@Phill, how *precisely* is it not working for you? Does it do nothing at all? Return a js error? Something else?
Ben Lee
@Ben Lee, I'm using FireBug console and I see no execution errors, viewing the source I don't the readonly="readonly" applied to any of the input elements in form1
Phill Pafford
@Phil - look at this example: http://jsfiddle.net/8vSKR/ . Try posting some more code so we can help `:)`
Kobi
@Ben - you're probably right. Old habits etc... `:)`
Kobi
problem was it was outside of the document.ready scope, placed the code inside and works great. Thanks
Phill Pafford
+2  A: 

This is even better use the input selector. Also note Read only is only for input type of text and password and textarea . It will not work on select elements, radio, checkboxes, buttons. If you want to display but not allow them to type or click. Try using disabled.

$("#form1 :input").attr("disabled", true);

Note: by using disabled it will grey out the input, select or textarea but will not post this element when submitted. If you need it to post let me know and I can help you out.

Here is a demo http://jsfiddle.net/j5PAn/

John Hartsock
Thanks this helped
Phill Pafford
@Phil I wasnt actually finished entering my question... you may want to re-read
John Hartsock