views:

381

answers:

4
<form>
<textarea name="test" value="no">
hi
</textarea>
<input type="submit" />
</form>

hi or no,and reason?

I ask this question because I see javascript editors use textarea.value = html; to restore the content when submit,why they do this if value attribute is useless?

+10  A: 

hi will be submitted. There is no value attribute for the <textarea> tag. See W3School's textarea tag reference for details.

To answer your question of why you see javascript libraries accessing the value property of a textarea DOM element, you have to appreciate that HTML and the DOM (Document Object Model) that javascript accesses are 2 different animals. In HTML the value of a <textarea> is its contents. In DOM, the value of a textarea node is contained in its value property. Although DOM property names often map 1:1 to HTML attribute names, they don't always and this is just one example.

Asaph
Search `wysiwyg.textarea.value = html;` in this file:http://www.peej.co.uk/sandbox/wysiwyg/wysiwyg.js
@unknown (google): That's javascript, not HTML. Different context. In that context, a textarea DOM element does have a `value` property.
Asaph
Try my example, Asaph - in Firefox 3.1 and IE 6 it alerts 'hi'.
Alex JL
@Salsa: Yes. That's what I would expect and is consistent with my answer.
Asaph
But when I run alert(document.getElementsByTagName('textarea').value),it says "undefined"
@unknown (google): `document.getElementsByTagName()` returns an array so you've got that a little wrong. Try this: `alert(document.getElementsByTagName('textarea')[0].value);`.
Asaph
A: 

The value of a textarea is it's contents. The 'value' property does not have a standard meaning for this tag, so a form or JavaScript will get 'hi' from the textarea. Here's a demonstration of this in JavaScript.

<form> 
 <textarea name="test" value="no" id='ff'>
  hi
 </textarea>
<input type="submit" />
</form>
<br>
<a onclick='showVal("ff")'>Show Value</a>
<script>
 function showVal(id){
   var snib=document.getElementById(id);
   alert(snib.value);
   }
</script>
Alex JL
+1  A: 

In a POST response, a textarea will respond with the contents of innerHTML. However, if you have set a value attribute to the textarea and you try getting textarea.value in JavaScript, you will receive the contents of the value attribute.

A browser should never display the value attribute of a textarea in the physical textarea because it isn't standard. The textarea tag operates differently from the input tags. I would assume it does that because the input tag doesn't support line breaks.

The value a user changes would be the innerHTML value (html in jQuery), not the value attribute like they do with input fields.

Jeff Rupert
+1  A: 

A couple other points -

All browsers that support javascript return read/write values for textarea.value, consistent with the input elements. But you can't use getAttribute('value') or setAttribute('value') with a textarea.

You can also read a textarea's 'type' property,though type is not an attribute either.

If you set the value property, textarea.value=string;it is equivilent to textarea.appendChild(document.createTextNode(string))-

A textarea can not contain any other elements, only text nodes.

The text in the textarea set from value will be the literal characters from the string, while setting the innerHTML property will escape any entities and minimize white-space.

kennebec