質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

5295閲覧

遷移後にセレクトボックスの選択を維持したい

arinc0

総合スコア31

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/01/10 16:26

js

1$(function(){ 2 var selectOption = $("select#guiest_id1") 3 selectOption.change(function(){ 4 $("form#submit_form").submit(); 5 }); 6 7 $("select#guiest_id1").next().find("ul").on("click", "li", 8 function(e){ 9 var selectedOption = e.currentTarget.children[0].rel; 10 console.log($(`option[value=${selectedOption}]`)); 11 $("option[value=selectedOption]").prop("selected", true); 12 }); 13 }); 14

html

1<select name="sort" id="guiest_id1" class="select-drop" sb="10928896" style="display: none;"> 2 <option value="NEW_PRODUCTS">新着順</option> 3 <option value="LOW_PRICE">安い順</option> 4 <option value="HIGH_PRICE">高い順</option> 5 <option value="OLD_PEODUCTS">古い順</option> 6</select>

erb

1<form id="submit_form", method="get", action="<%=potepan_category_path(@taxon.id)%>"> 2 <select name="sort" id="guiest_id1" class="select-drop"> 3 <option value="NEW_PRODUCTS">新着順</option> 4 <option value="LOW_PRICE" >安い順</option> 5 <option value="HIGH_PRICE" >高い順</option> 6 <option value="OLD_PEODUCTS">古い順</option> 7 </select> 8</form>

changeでセレクトボックスを選択と同時にGETリクエストでページが遷移し並び替えを行うことは成功しましたが、セレクトボックスの位置が初期状態に戻ってしまいます。
初期状態に戻ってしまうと今が何順で並んでいるかが分からなくなってしまう為、遷移前に選択した値を記憶し遷移後にoptionタグをselectedの状態にしたいと考えております。

onclickでクリックした要素のvalueの値は取得できそうなので
$("option[value=selectedOption]").prop("selected", true);
のようにしてみましたが上手くいきません。

遷移前に選択したoptionが遷移後にselectedの状態になっているように実装したいです。
お手数ですがアドバイスなど頂けたらと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

web アプリは基本的にステートレスなので遷移元と遷移先の間でデータを共有するにはそのための仕組みを利用する必要があります。

Ruby は分かりませんが、例えば ASP.NET Web アプリなら Session というフレームワーク組み込みの仕組みが用意されています。Ruby にそういう仕組みがないか調べてみてください。

そういうフレームワーク独自の仕組みが無くても、クッキーとか、隠しフィールドとか、クエリ文字列などを使うことができます。

例えばクエリ文字列を使うことを考えてみます。

form を method="get" で action="<%=potepan_category_path(@taxon.id)%>" で指定される URL に submit しているのですよね?

であれば、select 要素の name 属性と、選択した option の value 属性の値がクエリ文字列に設定されて送信されます。具体的には、例えば、form の action 属性が http://example.com/index になるとなるとして、「新着順」を選んで form をsubmit したのであれば、

GET http://ezample.com/index?sort=NEW_PRODUCTS

という要求がサーバーに送られます。

Ruby でもたぶん送信されてきたクエリ文字列をサーバーで取得する手段は用意されているはずなので、クエリ文字列の sort に設定された NEW_PRODUCTS を取得して、それを要求を受けた http://example.com/index レンダリングする際にその中に反映すれば良いと思います。

投稿2020/01/11 01:29

編集2020/01/11 01:31
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arinc0

2020/01/11 14:23

わかりやすく説明していただきありがとうございます! クエリ文字列を使用する方法しか思いつきませんでしたが、他にも方法があるのですね。 他の方法についても調べてみたいと思います! ありがとうございました!
guest

0

Rubyわかりませんけど、form送信しているならgetでもpostでもリクエストがサーバーに送信されているはずなので、そのリクエストをサーバー側で受け取って値によってselectedを与えれば良いと思います。
どちらかというとJavaScriptの役割ではないです。

投稿2020/01/10 23:29

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arinc0

2020/01/11 14:20

Javascriptの役割についてもっと理解を深めたいと思います。 回答ありがとうございました!
guest

0

ベストアンサー

<option value="NEW_PRODUCTS">新着順</option> <option value="LOW_PRICE" >安い順</option> <option value="HIGH_PRICE" >高い順</option> <option value="OLD_PEODUCTS">古い順</option> </select>

とベタに書いてしまうと rails っぽくないですし、今回の問題がやりにくいですね。select_tag と options_for_select(container, selected = nil) を使うと楽にできます。
<%= select_tag :name,
options_for_select([["新着順","NEW_PRODUCTS"],....],@name) %>
として、渡ってきた値を @name に入れて渡せば良いです。

選択肢はviewに書かず、controllerやmodelに定義しておくほうが、ごちゃごちゃしがちなviewが読みやすくなるので、私はそうしています。

投稿2020/01/11 02:35

winterboum

総合スコア23347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arinc0

2020/01/11 14:27

select_tag と options_for_selectについて、特にoptions_for_selectですがselected状態を設定することができるのはとても勉強になりました。コードも短くできそうでとても助かりました。 回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問