input typeのブラウザ対応確認
HTML5ではinput typeにdate, colorなど様々な形式を入力できるようになったが、ブラウザの対応状況はまだバラつきがある。サポートされていなければtextと同じ扱いになるので、補助入力機能が必要になったり、デフォルト幅やデザインも変わってくる。
javascriptから判定するには、以下のようにする。
var inputTypeCheck = function() { // dateをチェックする例 var el = document.createElement('input'); el.setAttribute('type', 'date'); el.value = 'aaa'; // NG value if (el.value === '') { // Supported } else { // Not Supported } }
date
は日付形式の入力しか受け付けない。あえて形式から外れた値を入れると、正しく機能していれば空文字列になるため、判別できる。他にもdatetime, datetime-local, month, week, time, number, range, color
などが使えるだろう。
tel, email
などは、正しく機能していても値のバリデーションがブラウザによって異なり、この方法は使いづらい。
setAttributeした後、そのままtypeを確認する例もあるが、
// ... el.setAttribute('type', 'date'); if (el.type === 'date') { // Supported } else { // Not Supported }
確かにChromeではdate
, Firefoxではtext
となり判定できそうだったが、Android Browser(4.2.2)ではdate
となっているのに挙動はtext
の様になる例もあり、上の方が確実かな?
Android Browserは開発終了してるが、まだ普通に使われている可能性がある。古いアンドロイド、標準の「ブラウザ」から乗り換えを|タブロイド|オトコをアゲるスマホニュース