JavaScript | HTML / CSS 連携:フォーム基礎 - number入力

JavaScript JavaScript
スポンサーリンク

number入力は「数値だけを入れてもらうための“賢い入力欄”」

type="number" の入力欄は、 ユーザーに 「数字だけ」を入力してもらうための専用の入り口 です。

年齢 個数 価格 点数 割合

みたいな「数で表される値」を扱うときに使います。

見た目はテキスト入力に似ていますが、 ブラウザが「これは数値だ」と理解してくれることで、

数値以外の入力を軽くチェックしてくれる 上下の矢印(スピンボタン)で値を増減できる スマホで数字専用キーボードが出やすくなる

という“数値向けの便利さ”が手に入ります。

number入力の基本形と「textとの決定的な違い」

いちばんシンプルな書き方

<input type="number" name="age">

フォームに入れるとこうなります。

<form action="/profile" method="post">
  <p>年齢:</p>
  <input type="number" name="age">
  <button type="submit">送信</button>
</form>

type="text" と違うのは、 「数字以外を入れようとするとブラウザが嫌がる」ことです。

例えば、 abc と入れようとしても、ブラウザによっては入力できなかったり、 送信時に「数値を入力してください」と警告されたりします。

number入力は「この欄は数字ですよ」とブラウザに宣言するもの。 text は何でも通すけれど、number は“数値以外”を嫌がる。

min・max・step:数値の範囲と刻みを決める

min と max で「許可する範囲」を決める

<input
  type="number"
  name="age"
  min="0"
  max="120"
>

この場合、

0 未満の値は入れられない、または送信時に警告 120 より大きい値も同様

という挙動になります。

年齢 点数(0〜100) 在庫数(0以上)

など、「この範囲に収まってほしい」数値には minmax を付けるのが基本です。

step で「増減の刻み」を決める

<input
  type="number"
  name="quantity"
  min="1"
  max="10"
  step="1"
>

これは「1〜10 の整数」を扱う例です。

上下の矢印を押すと、 1 ずつ増えたり減ったりします。

小数を扱いたいときは、刻みを変えます。

<input
  type="number"
  name="rate"
  min="0"
  max="1"
  step="0.1"
>

0.0 → 0.1 → 0.2 → … → 1.0 というように、0.1 ずつ増減します。

min・max・step は「この数値欄のルール」をブラウザに伝えるもの。 ユーザーにとっても、入力のガイドになります。

よくある number入力の使い方をフォームでイメージする

年齢入力欄

<form>
  <p>年齢:</p>
  <input
    type="number"
    name="age"
    min="0"
    max="120"
    required
  >
  <button type="submit">送信</button>
</form>

ここでの役割は、

年齢なので「数値」であることが前提 0〜120 の範囲に収めたい 必須入力にしたい

という条件を、 type="number" + min + max + required で表現しています。

商品の個数入力欄

<form>
  <p>購入個数:</p>
  <input
    type="number"
    name="quantity"
    min="1"
    max="99"
    step="1"
    value="1"
  >
  <button type="submit">カートに追加</button>
</form>

ここでは、

最低 1 個 最大 99 個 整数のみ 初期値は 1

というルールを number入力で表現しています。

JavaScript と number入力:値は「文字列として来る」ことに注意

input.value は「文字列」、必要なら数値に変換する

HTML:

<input
  type="number"
  id="quantity"
  name="quantity"
  min="1"
  max="10"
  value="1"
>
<button type="button" id="calc">合計を計算</button>
<p id="result"></p>

JavaScript:

const input = document.querySelector("#quantity");
const button = document.querySelector("#calc");
const result = document.querySelector("#result");

button.addEventListener("click", () => {
  const value = input.value;        // ここでは文字列 "1" など
  const num = Number(value);        // 数値に変換する

  if (Number.isNaN(num)) {
    result.textContent = "数値を入力してください。";
    return;
  }

  const price = 500;
  const total = num * price;

  result.textContent = `合計金額:${total}円`;
});
JavaScript

重要なのは、

input.value は「文字列」である 計算したいなら Number(value)parseInt(value, 10) で数値に変換する

という 2 点です。

number入力だからといって、 JavaScript側でいきなり数値として扱えるわけではない。 “入力値はまず文字列として来る”という感覚を持っておくと、バグを減らせます。

HTML側のバリデーションと組み合わせる

required で「必須入力」にする

<input
  type="number"
  name="age"
  required
>

空のまま送信しようとすると、 ブラウザが「数値を入力してください」と止めてくれます。

min・max・step と required をセットで使う

<input
  type="number"
  name="score"
  min="0"
  max="100"
  step="1"
  required
>

点数など、「必ず入れてほしい数値で、範囲も決まっている」ものは この組み合わせが定番です。

ブラウザが、

空かどうか 数値かどうか 範囲内かどうか

をある程度チェックしてくれます。

number入力を使うか迷ったときの判断基準

「ここは“数値だけ”を入れてもらう場所か?」

自分にこう聞いてみてください。

ここでユーザーに入力してもらいたいのは、 文字列ではなく「数」で表される値か?

YES → type="number" NO → type="text" や他の type

年齢 個数 点数 割合 重さ・長さ(単位は別途表示)

こういったものは、 number入力にするのが自然です。

逆に、 「数字も含むけど、実質は文字列(郵便番号をハイフン付きで入れるなど)」なら text入力の方が柔軟なこともあります。

初心者として「number入力」で絶対に掴んでほしいこと

type="number" の input は、 「数値だけを入れてもらうための、ルール付きの入力欄」 です。

ブラウザが「数値かどうか」「範囲に収まっているか」をある程度チェックしてくれる minmaxstep で「この欄の数値ルール」を表現できる name が送信時のキー名になる JavaScriptでは input.value は文字列なので、計算するときは数値に変換する

あなたが number入力を書くときに、 「この欄は“数で表される値”を受け取る場所で、その範囲や刻みもちゃんと決めておきたい」 と意識できていたら、 もう number入力を“ただの数字欄”ではなく、 “ユーザーとアプリの間で数値を安全にやり取りするためのインターフェース”として扱えている状態です。

タイトルとURLをコピーしました