プロが教える店舗&オフィスのセキュリティ対策術

プルダウンメニューって1回リロードするとデフォルトのメニュー
(一番上のメニュー、またはselected属性のメニュー)が選択されますよね。

たとえば、以下のフォームでチョキを一度「送信」すると、
再読み込みにされて「グー」が表示されてしまいます。

これを「送信」した後も「チョキ」を連続で選択できるようにしたいのですが良い方法はあるでしょうか?
(利用者が一旦別のページに飛んだ場合はデフォルトに戻っていいのですが・・)

---------------------------------------

<form method="post" action="janken.php">

モード
<select name="mode" size="1">
<option value="janken">ジャンケン</option>
<option value="gp">グーパー</option>
</select>


<select name="skill" size="1">
<option value="goo">グー</option>
<option value="choki">チョキ</option>
<option value="par">パー</option>
</select>
<input type="submit" value="送信">
</form>

以下、結果を出力するphp

-------------------------------------


htmlタグだけで実現可能でしょうか?

htmlで不可の場合、phpを使用するつもりですが、
if文で一つ一つのメニューに「前回コレを送信していたら選択」というのが思い浮かびますが、
もっとスマートなやり方はあるでしょうか?


別の質問になりますが、モードで「グーパー」を選んでいる時はチョキを選択できないようにしたいのですが、これはhtmlだけでは実現不可能でしょうか?

よろしくお願いいたします。

A 回答 (1件)

こんにちは。



ページをまたいで値を保持するならCookieやサーバ側の処理を併用しないといけません。

phpを使える環境であれば、以下のようなソースで実現できると思います。
ようは送信されたデータをもとにselectedを付加する質問者様が言っているような方法です。
各optionの部分にて送信された$skillとの判断を行い、selected="selected"を出力します。

また、チョキを選択させない方法ですが、選んだ時に一度モードを送信すればそのモードにより表示するoptionの中からチョキを表示しないようにすればHTMLだけで実現可能です。
(HTMLだけというのは語弊がありますが、PHPにて出力する内容を変更しているので画面上はHTMLだけで実現します)
以下のサンプルはJavaScriptを併用してグーパが選択された場合にはチョキのoptionに対してdisabledを設定するようにし、選択できないようにしています。

==== index.php

<?php
$skill = isset ( $_POST['skill'] ) ? $_POST['skill'] : null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>【OKWave回答サンプル集】プルダウンメニューのフォームについて</title>
<link rel="stylesheet" href="/okwave/qa/css/basic.css" type="text/css" />
<script type="text/javascript">
function modeChange ( mode ) {
document.forms['janken'].elements['skill'].options[1].disabled = mode === 'gp';
}
</script>
<style type="text/css">
</style>
</head>
<body>
<h1>プルダウンメニューのフォームについて(q7383144)</h1>
<form name="janken" action="./" method="post">
モード
<select name="mode" onchange="modeChange(this.value);">
<option value="janken">ジャンケン</option>
<option value="gp">グーパー</option>
</select>

<select name="skill" size="1">
<option value="goo"<?= $skill==='goo' ? print 'selected="selected"' : '' ?>>グー</option>
<option value="choki"<?= $skill==='choki' ? print 'selected="selected"' : '' ?>>チョキ</option>
<option value="par"<?= $skill==='par' ? print 'selected="selected"' : '' ?>>パー</option>
</select>
<input type="submit" value="送信">
</form>
</body>
</html>
<!-- q7383144 -->
    • good
    • 0
この回答へのお礼

ありがとうございます。色々実験して、思い通りの処理が出来ました。
とても勉強になりました。

お礼日時:2012/03/28 01:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!