support" /> support" /> support" /> support" />
Go back to home page of Unsolicited Advice from Tiffany B. Brown

Use IDL attributes to test <input type=""> support

HTML5 input control types still have a ways to go before every type is supported in every browser. In the meantime, you may still find that you need to feature-test whether a particular type is supported. Do this by checking the value of the type IDL attribute.

IDL attributes are defined by the HTML5 specification for each element or object. This allows us to retrieve our element properties or attributes using dot syntax. Though IDL attribute values often mirror DOM attribute values, they're not the same. In fact, sometimes — as with the type attribute of the input element — they're quite different.

As outlined in the HTML5 specification, if a user agent doesn't support a particular form type, the value of its IDL type property must be text. Take a look at the form below.

<form action="/script" method="post">
    <input type="date" name="eventdate" id="eventdate">
    <button type="submit">Save</button>
</form>

In browsers that don't support the date input type, the value of document.getElementById('eventdate').type will be text. But if you use document.getElementById('eventdate').getAttribute('type'), the value returned will match the value of type as authored, that is: date.

You'll run into this with jQuery and its .attr() as well. To use our example from above, $('#eventdate').attr('type') will return the DOM attribute value rather than the IDL attribute value. To retrieve the IDL value, you should retrieve the element instead of the jQuery object, and then check its IDL value. We'd just need to rewrite $('#eventdate').attr('type') to be $('#eventdate')[0].type.