久しぶりにゲームのスクリプトの続きを作っていたら、変なところで引っかかった。

ラジオボタンである箇所を選択不可能に設定していたはずなのに、それが効いていないのだ。



XHTMLで書くと



1
2
<label><input type="radio" name="new_class" value="1" disabled="disabled" tabindex="1" />1</label>
<label><input type="radio" name="new_class" value="2" tabindex="2" />2</label>


この1番のようになってほしいわけです。



CGI.pmが3.10のサーバで動かしてみるとちゃんと認識する、ということは確認したのだが、手元の3.33ではdisabledが認識されない。



調べていくと、どうも仕様が変わったらしい。

…というよりも、-disabledオプションが正式に採用されたと言うべきなのか。



CGI.pmは、HTMLの拡張に対応するために、属性値は勝手に作成できる仕様になっている。

で、3.10当時は以下のように書いて実装していた。



1
2
3
4
5
6
7
8
9
10
11
12
13
$cgi->radio_group(
-name => "new_class",
-value => 1,
-labels => {1 => 1},
-default => "none",
-disabled => "disabled",
),
$cgi->radio_group(
-name => "new_class",
-value => 2,
-labels => {2 => 2},
-default => "none",
),


ラジオボタンの考え方からするとおかしな使い方だったが。





で、今後はdisabledにする項目を指定するようになったようだ。



1
2
3
4
5
6
$cgi->radio_group(-name=>'group_name',
-values => ['eenie','meenie','minie','moe'],
-default => ['moe'],
-linebreak => 'true',
-disabled => ['moe'],
),


このサンプルコードは3.33のチェックボックス用のコードをラジオボタン用にアレンジしたもの。



使い方がわかれば難しいことでもないのだが、勝手に追加できるからといって先走るのもほどほどにしないといけないのかもなぁ。