I think mostly we are dealing with an entire web of existing content, and that effectively prevents us from changing this behavior. ☺ (at least for the way the input element is processed).
I did want to clarify that the value attribute is only a *default* value. You’ll notice that if you change the value in <input> using the keyboard, and then programmatically update the value attribute (e.g., setAttribute(‘value’, ‘reset value’), the actual value displayed to the user doesn’t change! That’s because the displayed value is stored internally to the input element and is exposed only using the IDL ‘value’ property (e.g., querySelector(‘input’).value). (Well, it’s a little more complicated than that… but that’s the simple answer.) Similar story for <textarea>. Yeah it’s weird, but it’s the web’s legacy.
Subject: Why is <input> empty?
With almost all HTML tags the information that is actually displayed to the user by the browser comes from the content of the tag.  The only exception I can think of is <input> where the text displayed to the user comes from an attribute.  This results in some really exceptional behavior including that you cannot have an </input> end tag.  I appreciate that when HTML was first implemented that was the way the tag worked, but I do not understand why a quarter century later it still has that exceptional behavior.  Why to I have to code <input type='input' value='12345'> when <input type='input'>12345</input> would be consistent with every other tag.  Related to this was the decision to create a new <button> tag, largely to permit specifying the displayed content of the element, rather than just permitting including the content with the <input type='button'> tag.
Next message: Brian Kardell: "Re: Why is <input> empty?"
Previous message: James Cobban: "Why is <input> empty?"
In reply to: James Cobban: "Why is <input> empty?"
Next in thread: Brian Kardell: "Re: Why is <input> empty?"
Reply: Brian Kardell: "Re: Why is <input> empty?"