LoginSignup
21
22

More than 5 years have passed since last update.

input[type=number] の有用性

Posted at

input[type=number] の有用性

html5 で input タグの type 属性がかなり増えましたが、なんだかあまり使われていない印象です。
ここでは type の種類(特に number)に着目しつつ、その有用性を説きたいと思います。

有用性1(UI の使い勝手が向上する)

もう言うまでもないメリットです。type=number に対応しているブラウザであれば

  • スピンボタンが登場する
  • 上下キーで値が上下する
  • min, max, step 属性で値をある程度制限することができる

type には tel とか search とか email とか 色々ありますが、ブラウザがあんまり対応していなかったり、目を見張るメリットがなかったり、入力項目として頻出しない、などであまり目立たない印象です。(ただ、入力値を明示する意味で積極的に使うべきだと思います。まぁスマホでは重要ですが)。

その点 type=number は「数値入力」というありふれた項目である上、スピンボタンがありがたすぎます。

有用性2(互換性を意識する必要がない)

html においては

  • なんだかよく分からない type は type=text として扱う
  • なんだかよく分からない type でも未対応の場合は type=text として扱う

と定義されています。
従って、何も考えず type=number としておけば、未対応ブラウザは type=text として、対応ブラウザは type=number として扱われます。

これにより、数値しか期待されていない入力項目で type=text を使うメリットは何一つ無い、と言えます。
(既存システムを書き換えると セレクタの関係で問題が発生しそうですが)。

有用性3(変なクラスを当てる必要がない)

type=number は数値の入力を想定しています。
そしての数値の入力は右寄せになっていて欲しいです(個人的には、ですが)。

type=text の場合は下記のような html を記述する必要があります(style タグは css ファイルに書かれていると思ってください)。

<style>
    input.tr {text-align: right;}
</style>

<input type="text" class="tr" /><br />

text フィールドに class で「右寄せにしてね」と指示しています。
これはこれで有りだと思いますが、「数値は一律右寄せ」という仕様であれば

    input[type=number] {text-align: right;}

と書いたほうが class の当て忘れもなくスマートです。

また、ホイールで値の上限したい場合なども同様です。
それ用の class の当てるのではなく、 input[type=number] で全て解決します。

有用性4(専用の各種メソッドが使える)

type=number として記述した input 要素は

  • stepUp
  • stepDown

というメソッドを呼ぶことが出来ます。
これは min, max, step 属性から、適切な値になるように値の増減をしてくれるメソッドです。

このメソッドを駆使するとプラグインの製作がとても捗ります。

ちょっと試してみると分かりますが、min, max, step 属性には小数も使えるため、自前で stepXX 系のメソッドを作ろうとすると結構苦労します。

こちらの記事でも触れていますが、特別なことをしない限り、min + step * N でバリデーションが走るので、よしなに実装すると「入力値が不正です」とかで怒られたりします。

個人的なプラグインで「スピンボタンを一定時間押し続けると増減値が10倍、100倍になる」「マウスホイールのグリグリで値が増減できる」という物を作りましたが、上記のメソッドがないと結構めんどくさかったと思います。

21
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22