javascriptでselect optionで選択した値をもとに location.hrefでそのページを読み直して、さらに選択した値をselectedで残したいのですがどうやったら可能でしょうか?



js
function sort(){

var t = document.sort.select.selectedIndex;

var cn = "keyword";

location.href = "/search/" + se + "/sort?&limit=20&page=1&sort_order=" + htmlspecialchars(t,ENT_QUOTES);

}

html
<select onchange="sort(this)" name="select">
<option value="DESC">価格が安い順</option>
<option value="ASC">価格が高い順</option>
</select>



追記:
サーバーサイドはPHPで、htmlとPHP両方のファイルで構成されているページで
この部分はjavascriptで制御しないといけないので何とか分かれば教えてほしいです。

回答の条件
  • 1人50回まで
  • 13歳以上
  • 登録:2012/08/24 17:39:41
  • 終了:2012/08/31 17:40:04

回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/08/29 03:57:57

最低限必要な部分だけ纏めて単独で動くものを作ってみました。
あとはそちらの環境に合わせて改良してください。

<html>
<head>
    <meta http-equiv="content-script-type" content="text/javascript">
    <script type="text/javascript">
    <!--
        // 変数初期化
        var t = '';
        // クッキー取得
        if (navigator.cookieEnabled) {
            var cs = document.cookie.split('; ');
            for ( var i = 0; i < cs.length; i++ ) {
                var v = cs[i].split('=');
                if ( v[0] == 'sort_order' ) {
                    t = v[1];
                }
            }
        } else {
            alert('クッキー利用不可');
        }
        // ソート
        function sort(obj){
            var t = obj.selectedIndex;
            var e = new Date(); // 現在時刻の取得
            e.setMinutes( e.getMinutes() + 2 ); // 有効期限は2分後とする
            document.cookie = 'sort_order=' + t + '; expires=' + e.toGMTString() + ';';
            location.reload(true); // テスト用なので単純にリロード
        }
        // スタートアップ
        function start_up(){
            document.forms['option_select']['output'].value = t; // テスト出力
            document.forms['option_select']['sort_order'].options[t].selected = true;
        }
    //-->
    </script>
</head>
<body onload="start_up()">
    <form name="option_select">
        <select onchange="sort(this)" name="sort_order">
            <option value="DESC">価格が安い順</option>
            <option value="ASC">価格が高い順</option>
        </select>
        <input type="text" name="output" value="" />
    </form>
</body>
</html>
id:koonii26

ありがとうございます。試してみます。

2012/08/29 06:35:58
  • id:windofjuly
    うぃんど 2012/08/24 18:02:11
    何かゴミがまざったような質問文になっていますが、
    htmlspecialcharsってことは…サーバーサイドはphp?

    phpでソートしてhtmlを作ってるならば、
    $_POST['sort_order'] の値で条件分岐するだけですが…

    はてなの仕様で質問文の一部が欠けたりすることもあるので、
    コメント欄に書き直すなどで、追加情報プリーズです。
  • id:windofjuly
    うぃんど 2012/08/25 20:18:45
    >追記:
    >javascriptで制御しないといけない

    php側の改造は無理ということであればクッキー利用ですね。

    javascriptでやることは次の二つです。
    1. location.href を行う前にsort_orderをクッキーに保存すること
    2. ページが表示されたら真っ先にクッキーを読み取ってsort_orderにチェックを入れること

    やることは2つだけですが、質問文のコードにあいかわらず意味不明な点があり、
    下手に回答を書くと、もっとややこしくなると思われ、ヒントのみで私は去ります。
  • id:koonii26
    クッキー利用と言うヒントをもらいやろうと思ったのですが、全くうまくいきません。
    ヒントページでもいいので教えていただけません。
    tの変数の値だけクッキーに保存したいと思っています。
    そのtの値をもとにOPTIONのselectedを決めたいと思っています。

    document.cookieやifを入れるまでは分かったのですが、サンプルページがなく苦戦しています。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません