みなさまこんにちは、加賀田です。弊社はお盆も無休で営業中です。お盆の間は近所のお弁当屋さんが軒並み店を閉めていて、昼食に困ります…。
さて、今回はHTMLの仕様のお話。とくにフォームコントロールの一つ「ラジオボタン」のお話を取り上げます。
ラジオボタン。複数の選択肢からひとつだけを選べる、あの丸いやつのことですね。HTMLではinput要素にtype=”radio”を指定して実現します。同じname属性値を持つラジオボタンのうち、常にひとつだけ選択することができます。
ここで、この「常にひとつだけ」というのが若干曲者。ではページを開いた直後、まだ何も選んでいない(初期)状態ではどのような表示になるのか?という問題が生じます。これについて、HTML4.01の仕様書では次のように述べられています。
If no radio button in a set sharing the same control name is initially “on”, user agent behavior for choosing which control is initially “on” is undefined. Note. Since existing implementations handle this case differently, the current specification differs from RFC 1866 ([RFC1866] section 8.1.2.4), which states:
At all times, exactly one of the radio buttons in a set is checked. If none of the <INPUT> elements of a set of radio buttons specifies `CHECKED’, then the user agent must check the first radio button of the set initially.
Since user agent behavior differs, authors should ensure that in each set of radio buttons that one is initially “on”.
すなわち、デフォルトで選択されている状態のラジオボタンを必ず一つ指定しないといけないということです。もともとは1番目のラジオボタンを初期状態で選択するようにとのことでしたが、”Since user agent behavior differs”つまり世の中のブラウザ屋さんが言うことを聞いてくれないから…と方針の変更にいたったということのようです。
で、言うことを聞かない世間のブラウザはどういう実装をしているかというと、「いずれのラジオボタンも選択されていない状態」というのを許容している場合が多いですね。IE、Firefox、Safari、Operaいずれもそのような実装になっているようです。
この実装はある種ブラウザ屋さんの過剰な親切なわけですが、とはいえこういう「ゼロもしくは1つの選択肢のみを選択させる」という仕様はしばしば要請されるものです。 HTMLの仕様に沿って解決するには、水無月ばけら氏やヤコブ・ニールセン博士も言及しているとおり「選択しない」という選択肢を設けるという方法もあるにはあります(し、これを用意しないと「選択したら最後、もとの未選択状態に戻せない」ということが問題になる場合があります)…が、上記の要請をしてくる人たちに受け入れられるほど直感的な方法ではないかもしれませんね。
HTMLの知識を持たない人たち(Web関連の仕事に従事している人たちを含めて)がWeb上の入力フォームを想像する際には、やはり紙のアンケート用紙とか質問紙のようなものをもとにイメージするのだろうと思われます。そうすると、「回答する場合はひとつだけチェック、回答しない場合は何も書き込まない」というインタフェースってやはり自然ではありますよね…。
ここはひとつ、「0以上の選択肢を選べるチェックボックス」「唯一の選択肢を選べるラジオボタン」につづく第3の「0もしくは1個の選択肢を選べる」 コントロールをW3Cさんに検討してもらいたいものです。