新城@筑波大学情報です。こんにちは。

In article <MeGdncKsEvcUfKWiRVn-gw@giganews.com>
        emu@ceres.dti.ne.jp writes:
> 猪谷と申します。
> <form action="/cgi-bin/test.cgi" method="get">
> <input type="text" name="some_text" />
> <ul>
>   <li><button type="submit" name="action" value="1234">Entry1</button></li>

<botton> なんてタグは、HTML の規格にありましたっけ?
使った事がないなあ。

>   <input type="submit" name="action" value="1234" />

こちらが、普通ですよね。

> と記述してやると、MSIE でも期待の動作(押されたボタンに該当する value
> の値が action として伝わる)をしてくれるのですが、この場合ブラウザでは
> submit ボタンのラベルとして value の値が表示されることになってしまいま
> す。この値はユーザが見ても意味不明であるため、できるだけユーザの目に直
> 接触れることが無いようにしたいのです。

最近、私は次のようにしました。

(1) value には、ユーザにとって意味があるものにする。
(2) 送られてきた文字列から内部に必要な value を復元する。

復元は、そんなには難しくありません。文字コードを正規化して、
連想配列一発です。Ruby だとこんな感じ。

    Rstate = [ "unseen", "dupdeleted", "ok", "reposting", "prof", "reposted" ]
    RstateMnemonic = { "unseen"=>"採点中", "dupdeleted"=>"重複", "ok"=>"OK", 
        "reposting"=>"再提出", "prof"=>"教官採点中", "reposted"=>"再提出済み" }

    def decode_rstate_mnemonic( nm )
        return nil if( nm == nil )
        nm = Kconv::toeuc(nm)
        Rstate.each {|rs|
            if( RstateMnemonic[rs] == nm )
                return( rs )
            end
        }
        return( "unknown" )
    end

あら、ループしている。逆方向の連想配列しかないので、全部の要
素でループして探していますね。予め作っておけばいいんだけれど、
2つあると両方の整合性を取るのが面倒なので、片方しか作ってい
ませんね。

あと見栄えを調整するなら、スタイルシートを使うといいかと思い
ます。

<li> <input type="submit" name="action" value="1234"   CLASS="entry1"/>
<li> <input type="submit" name="action" value="abcd"   CLASS="entry2"/>
<li> <input type="submit" name="action" value="foobar" CLASS="entry3"/>

あるいは、

<li CLASS="entry1"> <input type="submit" name="action" value="1234"/>
<li CLASS="entry2"> <input type="submit" name="action" value="abcd"/>
<li CLASS="entry3"> <input type="submit" name="action" value="foobar"/>

で、ヘッダのどこかに、 input.entry1 { イメージは、これ;} と
かli.entry1 { イメージはこれ; }とか書きます。実は、スタイル
シートはまだ勉強している所で使ったことはないのですど、人に奨
めています。うまくいったら教えて下さい。

と、質問に答えるふりをして、質問してしまう。fj の基本ですよね。

> この様に、一つのフォームで複数の submit ボタン(ボタンのラベルはその
> formでの値と関係ないものが使いたい)を配置し、どの submit が押されたの
> か知りたいという場合、MSIE でもきちんと動作させるにはどのように form
> を書けばよいのでしょうか。

「1つのフォームで」という条件がなければ、form を分割して、
本当のパラメタは、hidden で渡す手はありますよね。

<LI> <form action="/cgi-bin/test.cgi" method="get">
     <input type="hidden" name="action" value="1234">
     <input type="submit" value="Entry1">
     </form>
<LI> <form action="/cgi-bin/test.cgi" method="get">
     <input type="hidden" name="action" value="abcd">
     <input type="submit" value="Entry2">
     </form>
<LI> <form action="/cgi-bin/test.cgi" method="get">
     <input type="hidden" name="action" value="foobar">
     <input type="submit" value="Entry3">
     </form>

一応、ニュースグループとしては、発信側の話は、
fj.net.www.authoring ということになっているので、続きは
Followup-To: fj.net.www.authoring にします。ブラウザの設定で
直るという話でなくて、サーバ側の工夫でなんとかするということ
になるかと思います。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\