
以下のHTMLで例えば、「アルファベット/昇順」を選んだ後に、「高校生」にチェックしてsubmitすると、URLが以下のようにヘンテコリンになってしまうのですが・・・
http://localhost/index.php?kou=1&s=.%2Findex.php …
こういう風な → http://localhost/index.php?kou=1&s=2 「きちんとした」URLにするには、ここをどう書き換えるべきでしょうか?
onChange="location=this.options[this.selectedIndex].value"
加えて、小学生、中学生、高校生、それぞれのチェックボックス(または<label>でくくられた画像)にチェックが入る/外れる瞬間にSUBMITが回る(チェックのON/OFF状況、プルダウン、検索キーは保持される)ようにしたいのですが、ネットで前例みてみると、かなりハードルが高そうで・・・
https://teratail.com/questions/122347
よろしくお願い致します。
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<form method="get" action="./index.php" name="Form1">
<table>
<tr>
<td rowspan="2">
<table border="0">
<tr lang="zh-cn">
<td><label><input type="checkbox" value="1" name="sho"<?php if ($_GET["sho"] == 1) { echo " checked";} ?>>小学生<br><img src="./img1.png"></label></td>
<td><label><input type="checkbox" value="1" name="chu"<?php if ($_GET["chu"] == 1) { echo " checked";} ?>>中学生<br><img src="./img2.png"></label></td>
<td><label><input type="checkbox" value="1" name="kou"<?php if ($_GET["kou"] == 1) { echo " checked";} ?>>高校生<br><img src="./img3.png"></label></td>
</tr>
</table>
</td>
<td>
ソート<br>
<select name="s" onChange="location=this.options[this.selectedIndex].value">
<option value='./index.php?s=0'<?php if ($_GET["s"] == 0) { echo " selected";} ?>>日本語五十音/昇順</option>
<option value='./index.php?s=1'<?php if ($_GET["s"] == 1) { echo " selected";} ?>>日本語五十音/降順</option>
<option value='./index.php?s=2'<?php if ($_GET["s"] == 2) { echo " selected";} ?>>アルファベット/昇順</option>
<option value='./index.php?s=3'<?php if ($_GET["s"] == 3) { echo " selected";} ?>>アルファベット/降順</option>
</select>
</td>
</tr>
<tr>
<td>
キーワード<br>
<input value="<?php echo trim(htmlspecialchars(stripslashes($_GET['q']))); ?>" type="text" name="q">
<input type="submit" value="OK">
</td>
</tr>
</table>
</body></form>
</html>
No.2ベストアンサー
- 回答日時:
質問文のHTMLを評価すると、
<option value='./index.php?s=0'>日本語五十音/昇順</option>
――となりますが、ここを素直に「value="2"」とし、selectのonChangeイベントでフォームのsubmit()を呼ぶようにするとか。
ただ、いちいちサーバにリクエストするのは無駄のような。
ご回答ありがとうございます。
value="2"としてしまうと、リンク先が
http://localhost/2
になってしまうのですね(T_T)
>フォームのsubmit()を呼ぶように
<select name="s" onChange="location=this.options[this.selectedIndex].value">
厚かましくて恐縮です、ここを書き換えたらいいでしょうか。
確かにサーバにリクエストした方が他の検索フォームの値をずっと継承できてそっちの方がいいような(大したアクセス数のあるサイトでもないです)
No.3
- 回答日時:
|>フォームのsubmit()を呼ぶように
|<select name="s" onChange="location=this.options[this.selectedIndex].value">
こんなのとか:
<select name="s" onChange="javascript:this.form.submit()">
想定では、下記のようなリクエストが飛ぶはず。
(元のURL)/index.php?sho=1&chu=1&kou=1&s=2&q=test+message
※今時のやり方ではないので、No.1(babu_babu_babooさん)みたいに、イベントハンドラーを記述するほうが良いです。
osamuyさん、度々のご教示ありがとうございます。
早速組み込んでみましたが、おかげさまで、動作もばっちりです。
「イベントハンドラー」から勉強が必要ですね。
大変助かりました。ありがとうございます。
No.1
- 回答日時:
あまり精査していませんが。
checkbox の変化を捕えたいなら
<script>
document.addEventListener ('change', ({target: e})=> (/^(sho|chu|kou)$/.test (e.name) && e.form.submit ()), !1);
</script>
あと、location.href に代入
<select name="s" onChange="location.href=this.options[this.selectedIndex].value">
もしくは
<select name="s" onChange="location.href=this.value">
あと、</body></form> が逆。
あと、動けばいいと思っているだろうけれど
$_GET["s"] == 0 は、
$_GET["s"] == "0" のように文字列として比較する
あと、短く書いてごめん。
早速ありがとうございます。checkboxの方は組み込んだらすごい快適に動作しました。まさにこういうことがしたかったです。ありがとうございました。
>あと、location.href に代入
こちらもありがとうございます。恐縮です、改善できませんでした・・・また、
>あと、</body></form> が逆。
>$_GET["s"] == "0" のように文字列として比較する
これらのきめ細かいアドバイスもありがとうございます。修正いたしました。
大変助かりました、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP php ログイン 1 2022/11/01 00:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
jqueryのselect2で検索欄の文字...
-
jsonテキストデータの並び替え...
-
ラジオボタンを複数選択したと...
-
Adobe acrobat proでフォームを...
-
アップロードファイルの種類に...
-
二次元配列の全要素の全要素を...
-
jsで質問です。 ボタンが二つ存...
-
<tr>指定した表の行要素をボ...
-
配列の1要素を代入した変数を使...
-
台形公式
-
階層別の組織図の自動作成について
-
jQueryで同じクラス名のものを...
-
タグを教えてください。
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Outlookのアカウントがあるとメ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォームの状態やGETのURLは保...
-
form id、nameの番号振りなおし
-
複数 selectフォームから今回on...
-
PHPでURLにジャンプするには?
-
HTMLで前の画面に戻る時、入力...
-
laravelを利用してコントロール...
-
検索時の選択内容を保持する方法
-
セッションを使わずに遷移先画...
-
<input type="hidden" >で配列...
-
フォームへの前回入力値をクリ...
-
PHP ボタンが押されたら処理を...
-
VBA で、スペースを含むファイ...
-
php+mysqlでの重複チェックにつ...
-
phpで、フォームのラジオボタン...
-
フォーム送信後の更新ボタンで...
-
テキストリンクをPOST送信したい
-
DBの値をチェックボックスに反...
-
パラメーターを隠す
-
【PHPチェック】ラジオボタンが...
-
サーバ上でGETはできるがPOSTが...
おすすめ情報