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

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

新規登録して質問してみよう
ただいま回答率
85.37%
jQuery Mobile

jQuery Mobileとはスマートフォンとタブレット用に最適化されたフレームワークです。様々な携帯端末にjQueryで作られたユーザーインターフェイスシステムを提供します。

Ruby on Rails

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

JavaScript

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

Q&A

解決済

1回答

390閲覧

selectboxのchangeイベントが取れない

pecchan

総合スコア591

jQuery Mobile

jQuery Mobileとはスマートフォンとタブレット用に最適化されたフレームワークです。様々な携帯端末にjQueryで作られたユーザーインターフェイスシステムを提供します。

Ruby on Rails

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

JavaScript

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

0グッド

0クリップ

投稿2023/09/14 00:12

実現したいこと

selectboxのchangeイベントで項目を変更したい

前提

ruby on rails5.2 / jQueryでセレクトボックスの連動を実装中です。

よくある、親が選択されたら子が変わる都道府県セレクトボックスのようなものです。

親のセレクトボックスは、記載のコードで動いてますが、
子のセレクトボックスが、chengeイベント内に入ってきません。

発生している問題・エラーメッセージ

consoleにエラーなどは出ていません。

該当のソースコード

javascript

1let defaultOrganizationSelect = '<select name="listing_smart_lock[smart_lock_organization]" id="template__select"><option value>選択してください</option></select>'; 2let defaultDoorSelect = '<select name="listing_smart_lock[smart_lock_door]" id="template__select2"><option value>選択してください</option></select>'; 3 4$(document).on('change', '#listing_smart_lock__smart_lock_provider__select', function() { 5 let providerId = $('#listing_smart_lock__smart_lock_provider__select').val(); 6 if (providerId !== "") { 7 let selectedTemplate = $(`#listing_smart_lock__template__org__select${providerId}`); 8 $('#listing_smart_lock__smart_lock_organization__div').empty(); 9 $('#listing_smart_lock__smart_lock_organization__div').prepend(selectedTemplate.html()); 10 }else { 11 $('#listing_smart_lock__smart_lock_organization__div').empty(); 12 $('#listing_smart_lock__smart_lock_organization__div').prepend(defaultOrganizationSelect); 13 }; 14}); 15 16$(document).on('change', '#listing_smart_lock__smart_lock_organization__select', function() { 17 alert("これが呼ばれない"); 18 let organizationId = $('#listing_smart_lock__smart_lock_organization__select').val(); 19 console.debug(organizationId); 20 if (organizationId !== "") { 21 let selectedTemplate = $(`#listing_smart_lock__template__door__select${organizationId}`); 22 $('#listing_smart_lock__smart_lock_door__div').empty(); 23 $('#listing_smart_lock__smart_lock_door__div').prepend(selectedTemplate.html()); 24 }else { 25 $('#listing_smart_lock__smart_lock_door__div').empty(); 26 $('#listing_smart_lock__smart_lock_door__div').prepend(defaultDoorSelect); 27 }; 28});

html

1<label for="listing_smart_lock_smart_lock_provider_id">メーカー</label> 2<select id="listing_smart_lock__smart_lock_provider__select" name="listing_smart_lock[smart_lock_provider_id]"><option value="">選択してください</option> 3<option value="1">ほげ</option></select> 4<p></p> 5<label for="listing_smart_lock_smart_lock_organization_id">事業所</label> 6<div id='listing_smart_lock__smart_lock_organization__div'> 7<select id="listing_smart_lock__smart_lock_organization__select" class="" name="listing_smart_lock[smart_lock_organization_id]"><option value="">選択してください</option> 8</select> 9</div>

試したこと

試しに、子のセレクトボックスをclickにすると反応しました(alertが呼ばれました)。
ということは、
id = listing_smart_lock__smart_lock_organization__select
は認識できてそうです。
なぜchangeイベントが反応しないのでしょう?

javascript

1$(document).on('click'```

他にjsファイルを2つに分けてみましたが同じでした。

どうすればchangeイベントが取れるでしょうか?

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

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

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

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

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

int32_t

2023/09/14 00:24 編集

子のセレクトボックスを操作して値を変える直前にブラウザの開発者ツールで id="listing_smart_lock__smart_lock_organization__select" が存在することは確認しましたか? > 試しに、子のセレクトボックスをclickにすると反応しました(alertが呼ばれました)。 親の<select>を操作する前後で挙動は同じでしたか?
pecmm

2023/09/14 00:29

子セレクトボックスに含まれる option を増やしてみたらどうなりますか?
guest

回答1

0

ベストアンサー

親の変更で子を書き換える際にに子のidに「listing_smart_lock__smart_lock_organization__select」をしていないのでは?
また、子セレクトボックスはオプションが1つしかない場合はchangeできないので注意ください

javascript

1<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> 2<script> 3var html=`<select id="c_select"> 4<option value="">選択してください</option> 5<option value="2">ふが</option> 6</select>`; 7$(document).on('change','#p_select',function(){ 8 $('#c_area').html(html); 9}); 10$(document).on('change','#c_select',function(){ 11 alert("change"); 12}); 13</script> 14 15<select id="p_select"> 16<option value="">選択してください</option> 17<option value="1">ほげ</option> 18</select> 19<div id="c_area"> 20<select id="c_select"> 21<option value="">選択してください</option> 22</select> 23</div>

投稿2023/09/14 00:51

編集2023/09/14 00:57
yambejp

総合スコア116468

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

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

pecchan

2023/09/14 02:11

サンプルまで有難う御座います。 おっしゃる通りでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問