猪谷です。フォローありがとうございます。

yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes:

> In article <MeGdncKsEvcUfKWiRVn-gw@giganews.com>
>    emu@ceres.dti.ne.jp writes:

>>   <li><button type="submit" name="action" value="1234">Entry1</button></li>
>
> <botton> なんてタグは、HTML の規格にありましたっけ?
> 使った事がないなあ。

すでにいくつかフォローがついてありますように、HTMLの規格としてあるので
す、はい。

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

このフォームが動的に生成されるようになっておりまして(DBのレコードの一
部を表示する)、value のところにレコードのプライマリキーの値を埋め込む
ようにしていたわけです。

<li> entry_n のレコード値A
    <button name="view1" value="entry_nの主キー">ビュー1を表示</button>
    <button name="view2" value="entry_nの主キー">ビュー2を表示</button>
    <button name="modify"
            value="entry_nの主キー">該当レコードの修正</button>
</li>

HTMLの要点だけ抜き出すと、こんな感じでしょうか。テーブルからいくつかの
要素をリストで表示して、リストの各エントリ毎にアクションのためのボタン
を配置、飛び先では押されたボタンに該当するアクションを実行するという感
じです。

こういう用途だと button が一番しっくり来るわけですが、少なくともMSIEで
は理解不能な挙動になってしまって全く使い物になりません。また w3m/0.4.1 
だと button が解釈されないようで、これも問題なのですが。
# lynx、konqueror、dillo だと多少表示面での問題はあるにせよ、動作はし
# てくれます。

> 最近、私は次のようにしました。
>
> (1) value には、ユーザにとって意味があるものにする。
> (2) 送られてきた文字列から内部に必要な value を復元する。
>
> 復元は、そんなには難しくありません。文字コードを正規化して、
> 連想配列一発です。Ruby だとこんな感じ。

私の場合、主キー値はかなり長くなる場合があるので、ボタンのラベルに

「ビュー1を表示 123kdadie128412112132」

てなものが表示されるとなんだなぁ、というのと、飛び先でなるべく簡単にア
クションを判定したいなぁ、というのもあります(飛び先のページでは連想配
列や、文字列の分割をきれいに記述しにくい言語を使っているもので)。

ちなみに

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

この書き方の場合、value の値をサーバに渡すべきかどうか、というのはHTML
4.01 の規格を見る限りとくに指示はないようで、type="image" を使うのもあ
まりよろしくないらしい。konqueror(3.1.3)、w3m(0.4.1)、MSIE(6.0) は 
value を渡してくれないようです。よってこの目的では使えない。
# lynx では type="image" alt="text" で指定した text を表示してくれない…
# なぜ?

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

が、動かないのではどうしようもないので、<input type="submit">の見た目
を強制的に変更する方法を試してみました。

---x8------x8------x8------x8------x8------x8---

<style type="text/css">
#subm1 {
         background-image: URL(entry1.png);
         width: 60px; height: 20px;
         font-size: 0px;
       }
</style>

…略…

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

---x8------x8------x8------x8------x8------x8---

ううーーん、font-size: 0px あたりが非常に美しくない、無理やりだ、とい
う感じはあるものの、一応スタイルシート対応ブラウザでの見てくれを上書き
してしまうことはできますね。

背景画像だけ表示して、text は表示しない、なんて指定ができると良いんで
すが、visibility を hidden にすると submit ボタン自体表示されなくなる
ので、これはダメでした。

ともあれ、一つの手として覚えておきます。
# ただ、スタイルシートの書き方、ブラウザの対応状況などによってえらいこ
# とになってしまいそうな感じがぎゅんぎゅんします (^^;)

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

良い伝統だと思います、はい (^^)

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

先日作成したページではこの方法でも問題なかったので、ボタンの数だけ
<form></form> を配置するというあまり美しくない方法を採用しました。

が、

  入力1 [____] 入力2 [_____] … 入力n [_____]

    ・ item_i [action_1] [action_2]
    ・ item_j [action_1] [action_2] [action_3]
    ・ item_k [action_1] [action_2]
      …

なんていうフォームだと、ちと大変なことになってしまいます。

なんとか素直に <button> 使えないものかなぁ、と思うんですが、やはりMSIE 
からの利用を考えた場合には <button> は全くダメ、という結論しか出ないの
でしょうか。

こうやればよいのではなど、もしなにかアイデアありましたら、よろしくお願
いします。

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

ありがとうございます。Followup-To: f.n.w.authoring の指示に従います。

-- 
O
 o ●-●     猪谷 英一郎 == Eiichiro Itani
   -ゝ          emu@ceres.dti.ne.jp