Railsアプリケーションを学習しながら作成しております。
そこで、ドロップダウンメニューの変更内容を検知しその検知した値をrailsのインスタンス変数に代入し、viewで条件分岐で処理を分けたいのです。
_form.html.erb (現状のコード) <%= markup do |m| p = ClientFormPresenter.new(f, self) m << p.notes p.with_options(required: true) do |q| m << q.drop_down_list_block(:prefecture, '都道府県', Request::PREFECTURE_NAMES) m << q.drop_down_list_block(:agreement1, '北海道の名所', Client::AGREEMENTS) m << q.drop_down_list_block(:agreement2, '青森県の名所', Client::AGREEMENTS) m << q.drop_down_list_block(:agreement3, '岩手県の名所', Client::AGREEMENTS) m << q.drop_down_list_block(:agreement4, '宮城県の名所', Client::AGREEMENTS) m << q.drop_down_list_block(:agreement5, '秋田県の名所', Client::AGREEMENTS) end
HTMLのソースコード(都道府県のドロップダウンメニュー部分のみ) <label class="required" for="client_prefecture">都道府県</label><select required="required" name="client[prefecture]" id="client_prefecture"><option value="">選択してください</option> <option value="北海道">北海道</option> <option value="青森県">青森県</option> <option value="岩手県">岩手県</option> <option value="宮城県">宮城県</option> <option value="秋田県">秋田県</option> ・ ・ ・
たぶん以下のjavaScriptでドロップダウンメニューの変更を検知できると思います。
(参考書の記述をそのまま記述しました。)
account.js const element = document.querySelector('#client_prefecture'); element.addEventListener('change', handleChange); fanction handleChange(event) { const value = element.value; }
ここまではなるほどと理解できました。
そこで、javaScriptで取得したvalue値で以下のように条件分岐をしたいのです。
全く見当がつかなかったので、思いついたままイメージだけでコードを記述します。 _form.html.erb (現状のコード) <%= markup do |m| p = ClientFormPresenter.new(f, self) m << p.notes p.with_options(required: true) do |q| m << q.drop_down_list_block(:prefecture, '都道府県', Request::PREFECTURE_NAMES) if @prefecture == "北海道" m << q.drop_down_list_block(:agreement1, '北海道の名所', Client::AGREEMENTS) elsif @prefecture == "青森県" m << q.drop_down_list_block(:agreement2, '青森県の名所', Client::AGREEMENTS) elsif @prefecture == "岩手県" m << q.drop_down_list_block(:agreement3, '岩手県の名所', Client::AGREEMENTS) elsif @prefecture == "宮城県" m << q.drop_down_list_block(:agreement4, '宮城県の名所', Client::AGREEMENTS) else m << q.drop_down_list_block(:agreement5, '秋田県の名所', Client::AGREEMENTS) end end
イメージですがこのようにしたいのです。
エラーになるのはわかっていますが、javaScriptでドロップダウンメニューが変更された時点で@prefectureに値を代入するイメージです。(以下のようなイメージ)
account.js const element = document.querySelector('#client_prefecture'); element.addEventListener('change', handleChange); fanction handleChange(event) { const value = element.value; } @prefecture = value #ここでインスタンス変数に代入する。 これをviewで利用する。
こんなことができるのかもわからないのですが、どなたかご教授いただけないでしょうか?
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/02 06:53