aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/html/element/input/number/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/ja/web/html/element/input/number/index.html')
-rw-r--r--files/ja/web/html/element/input/number/index.html451
1 files changed, 451 insertions, 0 deletions
diff --git a/files/ja/web/html/element/input/number/index.html b/files/ja/web/html/element/input/number/index.html
new file mode 100644
index 0000000000..8177c9f00f
--- /dev/null
+++ b/files/ja/web/html/element/input/number/index.html
@@ -0,0 +1,451 @@
+---
+title: <input type="number">
+slug: Web/HTML/Element/input/number
+tags:
+ - Element
+ - Forms
+ - HTML
+ - HTML forms
+ - Input
+ - Input Element
+ - Input Type
+ - Number
+ - Reference
+translation_of: Web/HTML/Element/input/number
+---
+<div>{{HTMLRef("Input_types")}}</div>
+
+<p><span class="seoSummary">{{HTMLElement("input")}} 要素の <strong><code>number</code></strong> 型は、ユーザーに数値を入力させるために使用されます。数値以外の入力を除外するための値検証機能を内蔵しています。</span>ブラウザーによっては、マウスや指先のタップを使用して値をユーザーが値を増減させるための矢印を提供していることもあります。</p>
+
+<div>{{EmbedInteractiveExample("pages/tabbed/input-number.html", "tabbed-shorter")}}</div>
+
+<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div>
+
+<p><code>number</code> 型に対応していないブラウザーでは、 <code>number</code> 入力欄は <code>text</code> 入力欄で代替されます。</p>
+
+<table class="properties">
+ <tbody>
+ <tr>
+ <td><strong>{{anch("Value", "値")}}</strong></td>
+ <td>数字を表す {{jsxref("Number")}}、または空欄</td>
+ </tr>
+ <tr>
+ <td><strong>イベント</strong></td>
+ <td>{{domxref("HTMLElement/change_event", "change")}} および {{domxref("HTMLElement/input_event", "input")}}</td>
+ </tr>
+ <tr>
+ <td><strong>対応している共通属性</strong></td>
+ <td>{{htmlattrxref("autocomplete", "input")}}, {{htmlattrxref("list", "input")}}, {{htmlattrxref("placeholder", "input")}}, {{htmlattrxref("readonly", "input")}}</td>
+ </tr>
+ <tr>
+ <td><strong>IDL 属性</strong></td>
+ <td><code>list</code>, <code>value</code>, <code>valueAsNumber</code></td>
+ </tr>
+ <tr>
+ <td><strong>メソッド</strong></td>
+ <td>{{domxref("HTMLInputElement.select", "select()")}}, {{domxref("HTMLInputElement.stepUp", "stepUp()")}}, {{domxref("HTMLInputElement.stepDown", "stepDown()")}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Value" name="Value">値</h2>
+
+<p>入力欄に入力された数字の値を表す {{jsxref("Number")}} です。 {{htmlattrxref("value", "input")}} 属性に数値を設定することで、次のように入力欄の既定値を設定することができます。</p>
+
+<pre class="brush: html notranslate">&lt;input id="number" type="number" value="42"&gt;</pre>
+
+<p>{{EmbedLiveSample('Value', 600, 40)}}</p>
+
+<h2 id="Additional_attributes" name="Additional_attributes">追加の属性</h2>
+
+<p>すべての {{HTMLElement("input")}} 型で共通する属性に加え、 <code>number</code> 型の入力欄は次の属性にも対応しています。</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">属性</th>
+ <th scope="col">説明</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>{{anch("list")}}</code></td>
+ <td>任意の定義済み自動補完の選択肢を保持する {{HTMLElement("datalist")}} 要素の <code>id</code> です。</td>
+ </tr>
+ <tr>
+ <td><code>{{anch("max")}}</code></td>
+ <td>この入力欄で受け付ける最大値</td>
+ </tr>
+ <tr>
+ <td><code>{{anch("min")}}</code></td>
+ <td>この入力欄で受け付ける最小値</td>
+ </tr>
+ <tr>
+ <td><code>{{anch("placeholder")}}</code></td>
+ <td>入力欄の中が空の時に表示される入力例の値</td>
+ </tr>
+ <tr>
+ <td><code>{{anch("readonly")}}</code></td>
+ <td>論理値で、値が読み取り専用であるかを示す</td>
+ </tr>
+ <tr>
+ <td><code>{{anch("step")}}</code></td>
+ <td>上下の矢印で値を調整する時や、検証に使用する刻み値</td>
+ </tr>
+ </tbody>
+</table>
+
+<p id="htmlattrdeflist">{{page("/ja/docs/Web/HTML/Element/input/text", "list", 0, 1, 2)}}</p>
+
+<h3 id="htmlattrdefmax">{{htmlattrdef("max")}}</h3>
+
+<p>この入力欄が受け付ける最大値です。要素に入力された {{htmlattrxref("value", "input")}} がこれを超えた場合、要素は<a href="/ja/docs/Web/Guide/HTML/HTML5/Constraint_validation">制約検証</a>に失敗します。 <code>max</code> 属性の値が数値でない場合、要素は最大値を持ちません。</p>
+
+<p>この値は <code>min</code> 属性の値より大きいか、等しくしなければなりません。</p>
+
+<h3 id="htmlattrdefmin">{{htmlattrdef("min")}}</h3>
+
+<p>この入力欄が受け付ける最小値です。要素の {{htmlattrxref("value", "input")}} がこれより小さい場合、要素は<a href="/ja/docs/Web/Guide/HTML/HTML5/Constraint_validation">制約検証</a>に失敗します。 <code>min</code> 属性の値が数値でない場合、要素は最小値を持ちません。</p>
+
+<p>この値は <code>max</code> 属性の値より小さいか、等しくしなければなりません。</p>
+
+<p>{{page("/ja/docs/Web/HTML/Element/input/text", "placeholder", 0, 1, 2)}}</p>
+
+<p>{{page("/ja/docs/Web/HTML/Element/input/text", "readonly", 0, 1, 2)}}</p>
+
+<h3 id="htmlattrdefstep">{{htmlattrdef("step")}}</h3>
+
+<div id="step-include">
+<p><code>step</code> 属性は値が吸着する粒度を指定する数値、または後述する特殊な値 <code>any</code> です。刻みの基準値に等しい値 (指定されていれば <code>{{anch("min")}}</code>、そうでなければ {{htmlattrxref("value", "input")}}、どちらも設定されていなければ適切な既定値) のみが妥当となります。</p>
+
+<p>文字列値の <code>any</code> は刻みがなく、どの値でも許可されることを意味します (<code>{{anch("min")}}</code> や <code>{{anch("max")}}</code> など、他の制約に制限されます)。</p>
+
+<div class="note">
+<p><strong>注:</strong> ユーザーがデータを入力したときには刻みの設定には吸着せず、{{Glossary("user agent", "ユーザーエージェント")}}は直近の妥当な値、同じ距離の値の選択肢が二つあった場合は、正の方向の推奨値に丸められます。</p>
+</div>
+</div>
+
+<p><code>number</code> 入力欄の既定の刻み値は <code>1</code> であり、刻みの基準値が整数ではない場合を<em>除いて</em>、整数の入力のみを許可します。</p>
+
+<h2 id="Using_number_inputs" name="Using_number_inputs">number 入力欄の使用</h2>
+
+<p><code>&lt;input type="number"&gt;</code> 要素は、フォームに数値を入力するユーザーインターフェイスとロジックを構築する際に、作業を簡略化するのに役立ちます。 <code>type</code> の値に正しく <code>number</code> を設定して数値入力を作成すると、入力された文字列が数値かどうかが自動的に検証されるようになり、通常は値を1つずつ上下するための上下ボタンの組み合わせが表示されます。</p>
+
+<div class="warning">
+<p><strong>重要</strong>: 論理的には、数値入力欄の中に数字以外を入力することはできないはずです。これらは、ブラウザー間でこれに関するいくつかの意見の相違があるようです。 {{bug(1398528)}} を参照してください。</p>
+</div>
+
+<div class="note">
+<p><strong>注</strong>: ユーザーが HTML をその場面の裏でいじることができることを意識しておくことは極めて重要です。ですから、安全を目的として、サイトでクライアント側の値検証機能のみを使用しては<em>いけません</em>。何らかのセキュリティ上の問題を含む可能性がある値が提供されるトランザクションの場合は、いずれもサーバー側で値検証を行う<em>必要があります</em>。</p>
+</div>
+
+<p>モバイルブラウザーでは、ユーザーが値を入力しようとした時に、数値入力に適した特別なキーボードを表示することで、使い勝手をさらに向上させます。次のスクリーンショットは、 Android の Firefox で撮影されたものです。</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/14963/number-keyboard-fxa.png" style="border-style: solid; border-width: 1px; display: block; margin: 0px auto;"></p>
+
+<h3 id="A_simple_number_input" name="A_simple_number_input">単純な数値入力</h3>
+
+<p>最も基本的なフォームでは、次のように数値入力を実装することができます。</p>
+
+<pre class="brush: html notranslate">&lt;label for="ticketNum"&gt;購入するチケットの枚数:&lt;/label&gt;
+&lt;input id="ticketNum" type="number" name="ticketNum" value="0"&gt;</pre>
+
+<p>{{EmbedLiveSample('A_simple_number_input', 600, 40)}}</p>
+
+<p>数値入力は空の場合と単一の数値が入力された場合に妥当とみなされますが、それ以下は無効とみなされます。 {{htmlattrxref("required", "input")}} 属性が使用された場合は、入力欄が空の場合に妥当とみなされなくなります。</p>
+
+<div class="note">
+<p><strong>注</strong>: <a href="https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number">有効な浮動小数点数</a>を受け入れることができます (つまり、 <a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/NaN">NaN</a> でも <a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Infinity">Infinity</a> でもないもの)。</p>
+</div>
+
+<h3 id="Placeholders" name="Placeholders">プレイスホルダー</h3>
+
+<p>フォームがどのような入力データを取るのかについての行内のヒントを提供すると、有益なことがあります。これはページのデザインでそれぞれの {{HTMLElement("input")}} に説明のラベルを付けることができない場合に特に重要になります。ここで<strong>プレイスホルダー</strong>が登場します。プレイスホルダーはほとんどの場合、入力される <code>value</code> が取るべき値の形式のヒントを説明するために使用される値です。これは <code>value</code> が <code>""</code> の時に入力欄の中に表示されます。入力欄にデータが入力されると、プレイスホルダーは非表示になり、入力欄が空欄になると、プレイスホルダーは再度表示されます。</p>
+
+<p>ここで、 <code>number</code> 入力欄に "<code>10の倍数</code>" というプレイスホルダーを設定します。なお、プレイスホルダーが非表示になったり再表示されたりするのは、入力欄の中身を変更したときです。</p>
+
+<pre class="brush: html notranslate">&lt;input type="number" placeholder="10の倍数"&gt;</pre>
+
+<p>{{EmbedLiveSample('Placeholders', 600, 40)}}</p>
+
+<h3 id="Controlling_step_size" name="Controlling_step_size">刻み幅の制御</h3>
+
+<p>既定で、数値を増減させるための増減ボタンは、1刻みで値を増減させます。 {{htmlattrxref("step", "input")}} 属性を設定することで、刻みの量を指定する数値の値を変更できます。上記の例は10の倍数を指定すると言っていますので、 <code>step</code> の値を <code>10</code> にすることが妥当でしょう。</p>
+
+<pre class="brush: html notranslate">&lt;input type="number" placeholder="multiple of 10" step="10"&gt;</pre>
+
+<p>{{EmbedLiveSample('Controlling_step_size', 600, 40)}}</p>
+
+<p>この例で、増減ボタンが値を1ずつではなく10ずつ増減させることが分かるでしょう。手動で10の倍数ではない数値を入力することができますが、無効な値とみなされるでしょう。</p>
+
+<h3 id="Specifying_minimum_and_maximum_values" name="Specifying_minimum_and_maximum_values">最小値と最大値の指定</h3>
+
+<p>{{htmlattrxref("min", "input")}} 及び {{htmlattrxref("max", "input")}} 属性を使用して、入力欄が保持できる最小値と最大値を指定することができます。例えば、最小値を <code>0</code> に、最大値を <code>100</code> に設定する例をご紹介しましょう。</p>
+
+<pre class="brush: html notranslate">&lt;input type="number" placeholder="multiple of 10" step="10" min="0" max="100"&gt;</pre>
+
+<p>{{EmbedLiveSample('Specifying_minimum_and_maximum_values', 600, 40)}}</p>
+
+<p>更新したこの版では、増減ボタンで0未満や100より大きい数値を設定することができないことにお気づきでしょう。手動でこの範囲の外の値を入力することもできますが、無効な値とみなされるでしょう。</p>
+
+<h3 id="Allowing_decimal_values" name="Allowing_decimal_values">小数が使用できるようにする</h3>
+
+<p>数値入力の問題の一つが、既定で刻みが1になっていることです。小数を含む数値 (たとえば "1.0") を入力しようとすると、無効な値とみなされるでしょう。小数が必要な値を入力させたい場合は、これを <code>step</code> の値に反映させる必要があります(例えば <code>step="0.01"</code> で小数第2位まで許可します)。単純な例を示します。</p>
+
+<pre class="brush: html notranslate">&lt;input type="number" placeholder="1.0" step="0.01" min="0" max="10"&gt;</pre>
+
+<p>{{EmbedLiveSample("Allowing_decimal_values", 600, 40)}}</p>
+
+<p>この例では <code>0.0</code> から <code>10.0</code> までで、小数第2位までの値が許容されます。この例では "9.52" は妥当になりますが、 "9.521" は妥当ではありません。</p>
+
+<h3 id="Controlling_input_size" name="Controlling_input_size">入力欄の寸法の制御</h3>
+
+<p><code>number</code> 型の {{HTMLElement("input")}} 要素では、 {{htmlattrxref("size", "input")}} のような寸法を決める属性には対応していません。入力欄の寸法を変更するには <a href="/ja/docs/Web/CSS">CSS</a> に頼る必要があります。</p>
+
+<p>例えば、入力欄の幅を数字3桁の入力に必要なだけの幅に調整するには、 HTML に {{htmlattrxref("id")}} を設定し、これから入力欄を短くしたときに文字列が表示できなくならないように、プレイスホルダーを短縮します。</p>
+
+<pre class="brush: html notranslate">&lt;input type="number" placeholder="x10" step="10" min="0" max="100" id="number"&gt;</pre>
+
+<p>それから、要素の <code>id</code> が <code>#number</code> である要素の幅を短くします。</p>
+
+<pre class="brush: css notranslate">#number {
+ width: 3em;
+}</pre>
+
+<p>結果は以下のように表示されます。</p>
+
+<p>{{EmbedLiveSample('Controlling_input_size', 600, 40)}}</p>
+
+<h3 id="Offering_suggested_values" name="Offering_suggested_values">サジェスト値の提供</h3>
+
+<p>{{htmlattrxref("list", "input")}} 属性に、サジェスト値あたり一つの {{HTMLElement("option")}} 要素を含んだ {{HTMLElement("datalist")}} の {{htmlattrxref("id")}} を値として入れることにより、ユーザーの選択することができる既定の選択肢のリストを提供することができます。それぞれの <code>option</code> の <code>value</code> は、数値入力ボックスのサジェスト値に関係します。</p>
+
+<pre class="brush: html notranslate">&lt;input id="ticketNum" type="number" name="ticketNum" list="defaultNumbers"&gt;
+&lt;span class="validity"&gt;&lt;/span&gt;
+
+&lt;datalist id="defaultNumbers"&gt;
+ &lt;option value="10045678"&gt;
+ &lt;option value="103421"&gt;
+ &lt;option value="11111111"&gt;
+ &lt;option value="12345678"&gt;
+ &lt;option value="12999922"&gt;
+&lt;/datalist&gt;</pre>
+
+<p>{{EmbedLiveSample("Offering_suggested_values", 600, 40)}}</p>
+
+<div class="note">
+<p><code>number</code> 入力欄での {{htmlattrxref("list", "input")}} 属性の使用はすべてのブラウザーで対応しているわけではありません。例えば Chrome や Opera では動作しますが、 Firefox では動作しません。</p>
+</div>
+
+<h2 id="Validation" name="Validation">検証</h2>
+
+<p>すでに <code>number</code> 入力欄における幾つかの検証機能については言及しましたが、ここで確認してみましょう。</p>
+
+<ul>
+ <li><code>&lt;input type="number"&gt;</code> 要素は、数値 (または <code>required</code> が指定されていない場合は空欄) ではない入力を自動的に違反とします。</li>
+ <li>{{htmlattrxref("required", "input")}} 属性を使用すると、空欄の入力を違反とします。 (つまり、入力欄は埋める<em>必要があります</em>。)</li>
+ <li>{{htmlattrxref("step", "input")}} 属性を使用すると、妥当な値を特定の刻みの値 (例えば、10の倍数) に制約することができます。</li>
+ <li>{{htmlattrxref("min", "input")}} および {{htmlattrxref("max", "input")}} 属性を使用すると、妥当な値の下限と上限を設けることができます。</li>
+</ul>
+
+<p>次の例は上記の機能のすべてを例示しており、また幾らか CSS を用いて、 <code>input</code> の値によって、妥当または違反のアイコンを表示するようにします。</p>
+
+<pre class="brush: html notranslate">&lt;form&gt;
+ &lt;div&gt;
+ &lt;label for="balloons"&gt;風船の注文数 (10の倍数):&lt;/label&gt;
+ &lt;input id="balloons" type="number" name="balloons" step="10" min="0" max="100" required&gt;
+ &lt;span class="validity"&gt;&lt;/span&gt;
+ &lt;/div&gt;
+ &lt;div&gt;
+ &lt;input type="submit"&gt;
+ &lt;/div&gt;
+&lt;/form&gt;</pre>
+
+<p>{{EmbedLiveSample("Validation", 600, 80)}}</p>
+
+<p>様々な違反する値を入力して、フォームを送信しようとしてみてください。例えば、値なし、0未満または100を超えた値、10の倍数ではない値、数値でない値などです。そして、それぞれにおいてブラウザーがどのようなエラーメッセージを表示するかを確認してください。</p>
+
+<p>この例で適用される CSS は以下の通りです。</p>
+
+<pre class="brush: css notranslate">div {
+ margin-bottom: 10px;
+}
+
+input:invalid+span:after {
+ content: '✖';
+ padding-left: 5px;
+}
+
+input:valid+span:after {
+ content: '✓';
+ padding-left: 5px;
+}</pre>
+
+<p>ここで、 {{cssxref(":invalid")}} および {{cssxref(":valid")}} 擬似クラスを用いて、隣の {{htmlelement("span")}} 要素の生成コンテンツとして無効または妥当の適切なアイコンを表示し、妥当性の視覚的なインジケーターにすることができます。</p>
+
+<p>別な <code>&lt;span&gt;</code> 要素に入れたのは自由度を高めるためです。ブラウザーによっては一部の種類のフォーム入力欄において、あまり効果的に生成コンテンツを表示できないことがあります (<a href="/ja/docs/Web/HTML/Element/input/date#Validation"><code>&lt;input type="date"&gt;</code> の検証</a>の節の例を読んでください)。</p>
+
+<div class="warning">
+<p><strong>重要</strong>: HTML のフォーム検証は、入力されたデータが正しい形式であることを保証するサーバースクリプトの代用には<em>なりません</em>。</p>
+
+<p>HTML を調整して検証をくぐり抜けたり、完全に削除したりすることはとても簡単にできます。 HTML をバイパスし、サーバーに直接データを送信することも可能です。</p>
+
+<p>サーバー側のコードが受信したデータの検証に失敗した場合、不適切な形式のデータ (または大きすぎるデータ、間違った種類のデータなど) がデータベースに入力された場合に災害が発生するおそれがあります。</p>
+</div>
+
+<h3 id="Pattern_validation" name="Pattern_validation">パターンによる値検証</h3>
+
+<p><code>&lt;input type="number"&gt;</code> 要素は {{htmlattrxref("pattern", "input")}} 属性を使用して、入力された値が特定の正規表現パターンを満たすようにすることに対応していません。</p>
+
+<p>これは、 number 入力欄は数値以外の何が入力されても妥当にはならないからであり、上記で説明したとおり、 {{htmlattrxref("min", "input")}} および {{htmlattrxref("max", "input")}} 属性を用いて妥当な数値の最大値および最小値を制約することができます。</p>
+
+<h2 id="Examples" name="Examples">例</h2>
+
+<p>すでに既定では増分が <code>1</code> であるという事実を扱いましたので、 {{htmlattrxref("step", "input")}} 属性を使用して実数を入力できるようにすることができます。もう少し詳しく見てみましょう。</p>
+
+<p>以下の例は、ユーザーの身長を入力するフォームです。既定では慎重をメートル単位で受け付けますが、関連するボタンをクリックすることでフォームがフィートとインチを受け付けるように変更することができます。メートル単位の身長の入力欄は小数第2位まで受け付けます。</p>
+
+<p>{{EmbedLiveSample("Examples", 600, 100)}}</p>
+
+<p>HTML は次のようになります。</p>
+
+<pre class="brush: html notranslate">&lt;form&gt;
+ &lt;div class="metersInputGroup"&gt;
+ &lt;label for="meters"&gt;あなたの身長を入力してください (メートル):&lt;/label&gt;
+ &lt;input id="meters" type="number" name="meters" step="0.01" min="0" placeholder="例 1.78" required&gt;
+ &lt;span class="validity"&gt;&lt;/span&gt;
+ &lt;/div&gt;
+ &lt;div class="feetInputGroup" style="display: none;"&gt;
+ &lt;span&gt;あなたの身長を入力してください — &lt;/span&gt;
+ &lt;label for="feet"&gt;フィート:&lt;/label&gt;
+ &lt;input id="feet" type="number" name="feet" min="0" step="1"&gt;
+ &lt;span class="validity"&gt;&lt;/span&gt;
+ &lt;label for="inches"&gt;インチ:&lt;/label&gt;
+ &lt;input id="inches" type="number" name="inches" min="0" max="11" step="1"&gt;
+ &lt;span class="validity"&gt;&lt;/span&gt;
+ &lt;/div&gt;
+ &lt;div&gt;
+ &lt;input type="button" class="meters" value="身長をフィートとインチで入力"&gt;
+ &lt;/div&gt;
+ &lt;div&gt;
+ &lt;input type="submit" value="フォームを送信"&gt;
+ &lt;/div&gt;
+&lt;/form&gt;</pre>
+
+<p>これまでの記事ですでに見てきた属性の多くを使用していることがわかります。センチメートル単位のメートル値を受け入れるため、 <code>step</code> の値を <code>0.01</code> に設定して、 <em>1.78</em> のような値が無効とされないようにしました。また、その入力欄のプレイスホルダーも提供しました。</p>
+
+<p>最初はフィートとインチの入力欄を <code>style="display: none;"</code> を使用して非表示にしているため、既定はメートルでの入力です。</p>
+
+<p>次に、 CSS に進みます。これは、以前に見た検証のスタイル付けととても良く似ています。ここで注目するところはありません。</p>
+
+<pre class="brush: css notranslate">div {
+ margin-bottom: 10px;
+ position: relative;
+}
+
+input[type="number"] {
+ width: 100px;
+}
+
+input + span {
+ padding-right: 30px;
+}
+
+input:invalid+span:after {
+ position: absolute;
+ content: '✖';
+ padding-left: 5px;
+}
+
+input:valid+span:after {
+ position: absolute;
+ content: '✓';
+ padding-left: 5px;
+}</pre>
+
+<p>そして最後に、 JavaScript です。</p>
+
+<pre class="brush: js notranslate">let metersInputGroup = document.querySelector('.metersInputGroup');
+let feetInputGroup = document.querySelector('.feetInputGroup');
+let metersInput = document.querySelector('#meters');
+let feetInput = document.querySelector('#feet');
+let inchesInput = document.querySelector('#inches');
+let switchBtn = document.querySelector('input[type="button"]');
+
+switchBtn.addEventListener('click', function() {
+ if(switchBtn.getAttribute('class') === 'meters') {
+ switchBtn.setAttribute('class', 'feet');
+ switchBtn.value = '身長をメートルで入力';
+
+ metersInputGroup.style.display = 'none';
+ feetInputGroup.style.display = 'block';
+
+ feetInput.setAttribute('required', '');
+ inchesInput.setAttribute('required', '');
+ metersInput.removeAttribute('required');
+
+ metersInput.value = '';
+ } else {
+ switchBtn.setAttribute('class', 'meters');
+ switchBtn.value = '身長をフィートとインチで入力';
+
+ metersInputGroup.style.display = 'block';
+ feetInputGroup.style.display = 'none';
+
+ feetInput.removeAttribute('required');
+ inchesInput.removeAttribute('required');
+ metersInput.setAttribute('required', '');
+
+ feetInput.value = '';
+ inchesInput.value = '';
+ }
+});</pre>
+
+<p>いくつかの変数を宣言した後、イベントリスナーを <code>button</code> に追加し、切り替えの仕組みを制御しています。これはとても単純で、ほとんどがボタンの <code>class</code> と {{HTMLElement("label")}} を変更するためのものであり、そしてボタンが押されたときに2組の入力の display 値を更新しています。</p>
+
+<p>(なお、ここではメートルとフィート/インチの間の変換は行っていませんが、実際のウェブアプリケーションではおそらく行うでしょう。)</p>
+
+<div class="note">
+<p><strong>注:</strong> ユーザーがボタンをクリックしたとき、 <code>required</code> 属性を非表示にする入力欄から削除し、 <code>value</code> 属性を空にしています。これは入力欄の両方の組が入力されていなくてもフォームを送信することができるようにしています。これはユーザーが意図していないデータをフォームが送信しないことを保証するものでもあります。</p>
+
+<p>これを行わないと、フィート/インチ<strong>と</strong>メートルの両方を入力してフォームを送信することができてしまいます。</p>
+</div>
+
+<h2 id="Specifications" name="Specifications">仕様書</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">仕様書</th>
+ <th scope="col">状態</th>
+ <th scope="col">備考</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('HTML WHATWG', 'forms.html#number-state-(type=number)', '&lt;input type="number"&gt;')}}</td>
+ <td>{{Spec2('HTML WHATWG')}}</td>
+ <td>初回定義</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('HTML5.1', 'sec-forms.html#number-state-typenumber', '&lt;input type="number"&gt;')}}</td>
+ <td>{{Spec2('HTML5.1')}}</td>
+ <td>初回定義</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>
+
+<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>
+
+<p>{{Compat("html.elements.input.input-number")}}</p>
+
+<h2 id="See_also" name="See_also">関連情報</h2>
+
+<ul>
+ <li><a href="/ja/docs/Learn/HTML/Forms">HTML フォームガイド</a></li>
+ <li>{{HTMLElement("input")}}</li>
+ <li><code><a href="/ja/docs/Web/HTML/Element/input/tel">&lt;input type="tel"&gt;</a></code></li>
+ <li><a href="/ja/docs/Learn/Forms/Property_compatibility_table_for_form_controls">CSS プロパティの互換性</a></li>
+</ul>