* [CODE(HTMLe)@en[input]] 要素 [CODE(HTMLa)@en[step]] 属性 (HTML) [2] [[HTML]] の [CODE(HTMLe)@en[[[input]]]] [[要素]]の [DFN[[CODE(HTMLa)@en[step]] [[属性]]]]は、 [[フォーム制御子]]の[[精度]]を制御します。 [[日時]]や[[数値]]に関係する [CODE(HTMLa)@en[[[type]]]] に対して有効です。 [SRC@en[WF2 2.4.2]] [4] :状態:[[WHATWG]] [[WD]] :[[要素型]]:[CODE(HTMLe)@en[[QN[[[input]]][[[http://www.w3.org/1999/xhtml]]]]]] :[CODE(HTMLa)@en[[[type]]]]: [CODE(HTML)@en[[[date]]]], [CODE(HTML)@en[[[datetime]]]], [CODE(HTML)@en[[[datetime-local]]]], [CODE(HTML)@en[[[month]]]], [CODE(HTML)@en[[[time]]]], [CODE(HTML)@en[[[week]]]], [CODE(HTML)@en[[[number]]]], [CODE(HTML)@en[[[range]]]] :[[属性名]]:[CODE(HTMLa)@en[[[step]]]] ([Q@en[[[step]]]] ([Q[[[段階]]]]) より) :[[属性値]]:[CODE(HTMLa)@en[[[type]]]] に依存 (>>5) :[[既定値]]:[CODE(HTMLa)@en[[[type]]]] に依存 (>>6) [3] 仕様書: - [[Web Forms 2.0]] -- [CSECTION@en[2.4.2. Precision]] ** 属性値 [5] [SRC@en[WF2 2.4, 2.4.2]] ,[CODE(HTMLa)@en[[[type]]]],[[属性値]],[[既定値]] ,[CODE(HTML)@en[[[date]]]],[[日]]数,[CODE(HTML)[[[1]]]] (1[[日]]) ,[CODE(HTML)@en[[[datetime]]]],[[秒]]数,[CODE(HTML)[[[60]]]] (1[[分]]) ,[CODE(HTML)@en[[[datetime-local]]]],[[秒]]数,[CODE(HTML)[[[60]]]] (1[[分]]) ,[CODE(HTML)@en[[[month]]]],[[月]]数,[CODE(HTML)[[[1]]]] (1ヶ[[月]]) ,[CODE(HTML)@en[[[number]]]],値,[CODE(HTML)[[[1]]]] ,[CODE(HTML)@en[[[range]]]],値,[CODE(HTML)[[[1]]]] ,[CODE(HTML)@en[[[time]]]],[[秒]]数,[CODE(HTML)[[[60]]]] (1[[分]]) ,[CODE(HTML)@en[[[week]]]],[[週]]数,[CODE(HTML)[[[1]]]] (1[[週間]]) [12] [[時刻]]系[[制御子]]では、 [CODE(HTMLa)@en[[[step]]]] [[属性値]]は[[秒]]数です。 [[秒]][[未満]]の値のために[[小数]]を使用[['''して構いません''']]。 書式は、それぞれの [CODE(HTML)@en[[[number]]]] の[[値]]に用いられるものと同じですが、 [[零]]よりも大きく[['''しなければなりません''']]。 [SRC@en[WF2 2.4.2]] [6] [[日付]]系[[制御子]]では、 [CODE(HTMLa)@en[[[step]]]] [[属性値]]は[[日]]、[[週]]、[[月]]の数です。 書式は1[[桁]][[以上]]の [CODE(HTML)[[[0]]]]〜[CODE(HTML)[[[9]]]] で、[[十進数]]として解釈されます。 [[零]]は[[既定値]]として解釈されます。 [SRC@en[WF2 2.4.2]] [14] [[数値]]系[[制御子]]では、 書式は [CODE(HTML)@en[[[number]]]] の[[値]]と同じですが、 [[零]]よりも大きく[['''しなければなりません''']]。 [SRC@en[WF2 2.4.2]] [18] 更に、いずれの [CODE(HTMLa)@en[[[type]]]] でも、 [CODE(HTML)@en[[[any]]]] という特別な値を使用[['''して構いません''']]。 この[[値]]は、どんな[[値]]も使用[['''して構いません''']]と示すことになります。 [SRC@en[WF2 2.4.2]] ;; [CODE(HTMLa)@en[[[step]]]] に関する制約はなくなりますが、 その他の制約は通常通り適用されます。 [22] [[著者]]が与えた [CODE(HTMLa)@en[[[step]]]] が適切な[[値]]でなければ、 [[既定値]]が用いられます。 [SRC@en[WF2 2.4.2]] [[#comment]] ** 妥当性 [7] [[フォーム制御子]]が[[妥当]]となるためには、 基準点から [CODE(HTMLa)@en[[[step]]]] の[[整数倍]]の[[値]]を有[['''しなければなりません''']]。 [SRC@en[WF2 2.4.2]] [8] ここでいう基準点は、 [CODE(HTMLa)@en[[[min]]]] [[属性値]]か、 なければ [CODE(HTMLa)@en[[[max]]]] [[属性値]]か、それもなければ[[零点]]です。 [SRC@en[WF2 2.4.2]] [20] [[値]]が [CODE(HTMLa)@en[[[step]]]] に照らして適切でなければ、 [CODE(DOM)@en[[[stepMismatch]]]] [[妥当性検証誤り]]が用いられます。 しかし、[[利用者エージェント]]は、この[[誤り]]を[[報告]]する代わりに、 [[数値]]を [CODE(HTMLa)@en[[[step]]]] で認められる直近の[[値]]に黙って[[丸め]]ることに[['''して構いません''']]。 [SRC@en[WF2 2.4.2]] ;; しかし、その[[丸め]]により、 [[値]]が範囲外になり、 [CODE(DOM)@en[[[rangeOverflow]]]] などの[[妥当性検証誤り]]が生じることもあります。 [[#comment]] ** レンダリング [11] [CODE(HTMLa)@en[[[step]]]] [[属性]]を[[利用者界面]]にどう反映させるべきかは、 [[Web Forms 2.0]] では規定していませんが、 [CODE(HTMLa)@en[[[step]]]] が [CODE(HTML)[[[1]]]] の [CODE(HTML)@en[[[datetime]]]] について、 のように、[[文章入力制御子]]のうち、 [[年]]〜[[秒]]がそれぞれ編集可能になっており、 [[暦]]や[[時計]]を表示するための[[ボタン]]が付されている例を示しています。 [SRC@en[WF2 2.4.2]] [[#comment]] ** 実装の精度 [21] [[著者]]が [CODE(HTMLa)@en[[[step]]]] で指定した[[値]]が[[利用者エージェント]]にとって小さすぎる時、 [[利用者エージェント]]は [CODE(HTML)@en[[[any]]]] であるかのように取り扱い[['''するべきです''']]。 [SRC@en[WF2 2.4.2]] ;; 例えば、多くの[[利用者エージェント]]では [CODE(HTML)@en[[[1e-9999999]]]] は [[underflow]] になり、扱えませんので、 [CODE(HTML)@en[[[any]]]] であるかのように扱うべきです。 [23] [[利用者エージェント]]は[[利用者]]や[[著者]]が指定した[[値]]を[[二進表現]]に変換せずに、 元の[[文字列]]形のままで[[比較]]を行うことが[['''推奨''']]されます。 それにより、[[十進数]]と[[二進数]]の変換による[[誤差]]が生じるのを防ぐことができます。 [SRC@en[WF2 2.4.2]] [24] [[利用者エージェント]]がどうしても[[二進数]]に変換する必要がある時は、 [[ECMA 262]] の 9.3.1 節 ([CODE@en[[[ToNumber]]]]) や 8.5 節 ([CODE(JS)@en[[[Number]]]]) で定義されているものと[[等価]]な[[算法]]を (扱える[[数値]]の範囲はその[[利用者エージェント]]で適当なものと読み替えて) 使用[['''するべきです''']]。 [SRC@en[WF2 2.4.2]] [[#comment]] ** 例 [9] [PRE(HTML example code)[ ]PRE] この例では、任意の[[年月日]]を選択できますが、 [[時刻]]は[[偶数]][[分]]丁度でなければなりません。 [SRC@en[WF2 2.4.2]] [10] [PRE(HTML example code)[ ]PRE] この例では、[[時]]と[[分]]はいつでも構いませんが、 [[分]]丁度から15と10分の2[[秒]]後でなければなりません。 従って、 [CODE(HTML)[00:00:15.2]], [CODE(HTML)[00:01:15.2]], [CODE(HTML)[00:02:15.2]], ... [CODE(HTML)[23:59:15.2]] が選択肢となります。 [SRC@en[WF2 2.4.2]] ;; [CODE(HTMLa)@en[[[step]]]] の[[既定値]]が [CODE(HTML)[[[60]]]] (1[[分]]) だからです。 [13] [PRE(HTML example code)[ ]PRE] この例では、[[1900]]年以降の[[日曜日]]だけが選択できます。 [SRC@en[WF2 2.4.2]] [15] [PRE(HTML example code)[ ]PRE] この例では、 [CODE(HTML)[-1.1]], [CODE(HTML)[-1.35]], [CODE(HTML)[-1.60]], [CODE(HTML)[-1.85]], [CODE(HTML)[-2.1]], ... が認められる値となります。 [SRC@en[WF2 2.4.2]] [16] [PRE(HTML example code)[ ]PRE] この例では、[[偶数]]だけが認められます。 [SRC@en[WF2 2.4.2]] ;; [CODE(HTML)@en[[[range]]]] では [CODE(HTMLa)@en[[[min]]]] の[[既定値]]が [CODE(HTML)[[[0]]]] だからです。 [17] [PRE(HTML invalid example code)[ ]PRE] この例では、 [CODE(HTMLa)@en[[[step]]]] [[属性]]の書式が不適当なので、 [CODE(HTMLa)@en[[[step]]]] [[属性値]]は使われず、 [[既定値]]の [CODE(HTML)[[[1]]]] が使われます。 [SRC@en[WF2 2.4.2]] ;; 十分の一は、 [CODE(HTML example)[[[0.1]]]] と書かなければなりません。 [19] [PRE(HTML example code)[ ]PRE] この例では、任意の[[浮動小数点数]]が使用できます。 [SRC@en[WF2 2.4.2]] [[#comment]] * メモ - [1] 日本語では[[歩み]], [[歩調]], [[段]], [[段階]], [[手順]], [[踊り方]], [[音程]],[[手段]], [[処置]], [[階級]]など。