* [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] 日本語では[[歩み]], [[歩調]], [[段]], [[段階]], [[手順]], [[踊り方]], [[音程]],[[手段]], [[処置]], [[階級]]など。