Bug Tracker

Opened 12 years ago

Closed 12 years ago

#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
Blocked by: Blocking:

Description (last modified by mathias)

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 (5)

comment:1 Changed 12 years ago by mathias

Cc: addyosmani added
Component: unfiledattributes
Description: modified (diff)
Status: newopen

comment:2 Changed 12 years ago by mathias

Description: modified (diff)

comment:3 Changed 12 years 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 12 years 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.

comment:5 Changed 12 years ago by Timmy Willison

Priority: undecidedlow
Resolution: wontfix
Status: openclosed

Seems to me this is similar to $('input').prop('placeholder'). I don't think we should ever be falling back to getAttribute with properties.

Note: See TracTickets for help on using tickets.