MW211 EXIT

devlog
JavaScript/submitボタンを明細毎につける
2011年10月20日
以下のような「選択」ボタンが明細毎に存在する画面があって
ボタンを押した飛び先に、明細のIDを渡したい場合がある。
┌─┬───────────────────────────────┌──┐┐
│ 1│明細1                                                        │選択││
├─┼───────────────────────────────├──┤┤
│ 2│明細2                                                        │選択││
├─┼───────────────────────────────├──┤┤
│ 3│明細3                                                        │選択││
└─┴───────────────────────────────└──┘┘

GETパラメータで渡すのは簡単で、以下のようにURIを編集してlinkしてあげればよい。
┌──────────────────────────────────────┐
│<input type="button" value="選択" onclick="window.open('飛び先.php?id=1',… │
│<input type="button" value="選択" onclick="window.open('飛び先.php?id=2',… │
│<input type="button" value="選択" onclick="window.open('飛び先.php?id=3',… │
└──────────────────────────────────────┘

しかし、POSTパラメータとして渡すとなるとsubmitボタンとなり、
以下のように識別子が入り込む余地がない(ように見える)。
┌──────────────────────────────────────┐
│<form method="post" action="飛び先.php">                                    │
│<input type="submit" value="選択"/>                                         │
│<input type="submit" value="選択"/>                                         │
│<input type="submit" value="選択"/>                                         │
│</form>                                                                     │
└──────────────────────────────────────┘

ベタな方法としては、以下のようにname属性を分けて、
飛び先で、$_POSTを全件ループして、キーが「submit_id_xxxx」のものを抽出し、
さらに「submit_id_」を除外すればidが取得(復元)できる。
┌──────────────────────────────────────┐
│<form method="post" action="飛び先.php">                                    │
│<input type="submit" name="submit_id_1" value="選択"/>                      │
│<input type="submit" name="submit_id_2" value="選択"/>                      │
│<input type="submit" name="submit_id_3" value="選択"/>                      │
│</form>                                                                     │
└──────────────────────────────────────┘

JavaScriptが使えるならもう少しスマートな方法がある。
┌──────────────────────────────────────┐
│<form method="post" action="飛び先.php">                                    │
│<input type="hidden" name="id"/>                                            │
│<input type="submit" value="選択" onclick="this.form.id.value='1';"/>       │
│<input type="submit" value="選択" onclick="this.form.id.value='2';"/>       │
│<input type="submit" value="選択" onclick="this.form.id.value='3';"/>       │
│</form>                                                                     │
└──────────────────────────────────────┘
これなら、「$_POST['id']」で一発で受け取ることができる。
分類:JavaScript