* [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] 日本語では[[歩み]], [[歩調]], [[段]], [[段階]], [[手順]], [[踊り方]], [[音程]],[[手段]], [[処置]], [[階級]]など。 [1901] [CITE@en[Web Applications 1.0 r7517 Make it possible for to be submitted (before, it couldn't because it didn't match the step, but now, if possible, the step is based on the default value rather than zero if there's no min).]] ( ([TIME[2012-11-21 04:49:00 +09:00]] 版))