Ticket #9833 (closed bug: wontfix)
`maxLength` property is buggy in IE8/IE9
| Reported by: | mathias | Owned by: | |
|---|---|---|---|
| Priority: | low | Milestone: | None |
| Component: | attributes | Version: | git |
| Keywords: | Cc: | addyosmani | |
| Blocking: | Blocked by: |
Description (last modified by mathias) (diff)
IE≤8 has a .maxlength property on <textarea> elements instead of .maxLength. IE9 is even funnier and has none of these properties (!). Looks like we’re forced to fall back to .getAttribute() for that browser — I can’t think of any other solution.
propFix in jQuery maps $(el).prop('maxlength') to el.maxLength but that fails in IE8.
Test case: http://jsfiddle.net/mathias/Vc9ap/ tests $(el).prop('maxlength'), $(el).prop('maxLength'), and el.maxlength.
It should say 42,42,undefined. Results:
- IE8: undefined,undefined,42
- IE9: undefined,undefined,undefined (WTF)
- IE10 and others get it right.
In my code, I’m using something like el.maxLength || el.maxlength || el.getAttribute('maxlength') now. It seems jQuery should do the same.
Change History
comment:1 Changed 23 months ago by mathias
- Cc addyosmani added
- Status changed from new to open
- Component changed from unfiled to attributes
- Description modified (diff)
comment:3 follow-up: ↓ 4 Changed 23 months ago by jdalton
MSDN suggests maxLength is not supported on TEXTAREA's yet: http://msdn.microsoft.com/en-us/library/ms534157(v=vs.85).aspx
IE9 is behaving more like other browsers by not automagically creating a property for unknown attributes. Besides the prop access issue you will have the max length not enforced. I don't think it falls on to jQuery to create fallbacks for HTML5 support.
comment:4 in reply to: ↑ 3 Changed 23 months ago by mathias
Replying to jdalton:
MSDN suggests maxLength is not supported on TEXTAREA's yet: http://msdn.microsoft.com/en-us/library/ms534157(v=vs.85).aspx
FWIW, here’s the bug for that: https://connect.microsoft.com/IE/feedback/details/679494/respect-maxlength-for-textarea-elements
IE9 is behaving more like other browsers by not automagically creating a property for unknown attributes. Besides the prop access issue you will have the max length not enforced. I don't think it falls on to jQuery to create fallbacks for HTML5 support.
I agree, but since jQuery already maps .prop('maxlength') to .prop('maxLength') it might make sense to add a fallback to .getAttribute('maxlength') so getting the property still works.
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.
