formの送信データと表示内容について

[新着] Webテンプレートを仮オープンしました



0   名前: ミニ : 2006/05/23(火) 22:24  ID:VdaIp9mX
【何をしたいのか】
→ 例えば、<input type="submit" value="送信" name="button">と書くと、
  ボタンの表示文字は「送信」送られるデータも「送信」になりますよね?
  この表示文字と送信データを別なものにしたいと思ってます。


【何をしてみたのか】
→ valueを二つ置いてみたり(value="a" value="1")、
  カンマで区切ってみたり(value="a","1")(value="a,1")(value=["a","1"])
 

【備考】
RubyでCGIを作ってます。
HTMLでいくつかのボタンを作成してデータを送信。
ボタンのnameは全て同じにして、valueを見て処理を決めます。
今はif文でやってます。
もし、表示文字と送信されるデータを変えることが出来れば、
条件分けにジャンプテーブルを使いたいと思ってます。
そのためには、ボタンに1から順番に数字を当てはめてその数字を使う必要があります。
ラジオボタンを使って送信ボタンでCGIを呼ぶことも考えたけど、
ユーザの目で見れば、2回クリックするより1回のほうがいいと思ったのでがんばってます。
アイデアを貸してください。お願いします。
(出来れば、java・javascriptは使いたくありません)

1   名前: ミニ : 2006/05/23(火) 22:24  ID:VdaIp9mX
何とか強引に出来ましたw
やっぱり自分で思いつくとうれしいですね。

でわ・・・。

2   名前: F ◆31IwthomhZ : 2006/05/23(火) 22:24
 自己解決した場合でも、出来たらその方法をアップしてください。後に同様の疑問にぶつかった方の参考になることでしょう(強制ではありませんけれど、特に特殊な方法は例示が貴重な情報となります)。

以下「はじめにお読みください」(http://www.tagindex.com/bbs/note.html)から引用:
・問題が解決した場合は、質問したスレッド内でそのことを伝えてください(「ありがとうございました」とか「解決できました」とか)。自己解決の場合は、どのように解決したのかを報告してくれるとベストです。

3   名前: ミニ : 2006/05/23(火) 22:24  ID:VdaIp9mX
いや〜うれしくってね。
つい忘れてましたw

[source(HTML)]
<input type="submit" value="太字" name="button">
<input type="hidden" value=0 name="太字">
<br>
<input type="submit" value="斜体" name="button">
<input type="hidden" value=1 name="斜体">
<br>
<input type="submit" value="下線" name="button">
<input type="hidden" value=2 name="下線">
[/source(HTML)]

HTMLにはhiddenとsubmitをペアで作ります。
submitのvalue(送られるデータ)とhiddenのnameを同じにします。
で、hiddenのvalueに0からの連番をつけていきます。

[source(HTMLから呼び出されるCGI)]
input=CGI.new
initialize=[]

initialize[0]=method(:fbold)
initialize[1]=method(:fitalic)
initialize[2]=method(:fuline)

initialize[ input[ input["button"] ].to_i ].call()
[/source(HTMLから呼び出されるCGI)]

見てのとおりです。
今日思いついた新鮮な命令が、最後の行です
input["name"]は、formのnameに入れられた何かの値をとってくる命令です。
見やすいようにスペースで区切りました。
まず、name="button"のvalue値を取ってきます。(ボタンに表示されている文字列)
そして、
それをnameに持つformの何かのvalue値を取ってきて、それを、関数を代入した配列の番号として、
その関数を呼び出してます(.call())
(.to_iは数値に変換する命令)

見やすく書くと、

a=input["button"]
b=input[a]
initialize[b.to_i].call()

[source(CGIから呼び出される関数郡)]
def fbold()
print "太字"
end

def fitalic()
print "斜体"
end

def uline()
print "下線"
end
[/source(CGIから呼び出される関数郡)]

4   名前: F ◆31IwthomhZ : 2006/05/23(火) 22:24
 情報提供、ありがとうございました。

一覧へ戻る