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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

2回答

1394閲覧

bootstrapとjqueryで作成したドロップダウンリストから選択した画像をブラウザに表示する方法

hiro-chan

総合スコア18

jQuery

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2019/12/23 06:04

編集2019/12/23 06:27

html

1・・・・・・ 2・・・・・・ 3<div class="dropdown"> 4 <button type="button" class="btn btn-primary dropdown-toggle btn-lg" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">ヨットのクラスを選択</button> 5 <ul class="dropdown-menu"> 6 <li><button class="dropdown-item" value="laser"><img class="dropdown_img" src="img/laser.PNG" alt="laser"></button></li> 7 <li><button class="dropdown-item" value="laser radial"><img class="dropdown_img" src="img/laser_radial.PNG" alt="laser_radial"></button></li> 8 <li><button class="dropdown-item" value="laser_4.7"><img class="dropdown_img" src="img/laser_4.7.PNG" alt="laser_4.7"></button></li> 9 <li><button class="dropdown-item" value="470"><img class="dropdown_img" src="img/470.PNG" alt="470"></button></li> 10 <li><button class="dropdown-item" value="snipe"><img class="dropdown_img" src="img/snipe.PNG" alt="snipe"></button></li> 11 <li><button class="dropdown-item" value="taser"><img class="dropdown_img" src="img/taser.PNG" alt="taser"></button></li> 12 <li><button class="dropdown-item" value="optimist"><img class="dropdown_img" src="img/optimist.PNG" alt="optimist"></button></li> 13 </ul> 14 </div> 15・・・・・・ 16・・・・・・ 17・・・・・・ 18 <div type="image" id="newImg_boat"></div> 19・・・・・・ 20・・・・・・ 21<script> 22・・・・・・ 23$(function(){ 24 $('.dropdown-menu .dropdown-item').click(function(){ 25 var visibleItem = $('.dropdown-toggle', $(this).closest('.dropdown')); 26 visibleItem.text($(this).attr('value')); 27 }); 28 }); 29 30・・・・・・ 31<script>

ドロップダウンリストにvalue属性の値を取得して選択後にドロップダウンリストに表示することはできましたが、選択した画像を取得し、divタグ”newImg_boat”に表示できません。
どうすればよろしいでしょうか?
ご教示お願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

選択した画像を別の要素で表示するために行う必要があることは、以下の二つです:

  1. クリックされた要素と対応する画像の URL を得る。
  2. 手順 1 で得た URL を別の要素の src 属性へ設定する。

また、質問文のコードでは div 要素の src, type 属性へ値を設定しようとしていますが、 **div 要素に src, type 属性は存在しない**ため、正常に画像が表示出来ません。そのため、今回の回答では div 要素を img 要素に差し替えます。

クリックされた要素と対応する画像の URL は、クリックされた要素の子要素の src 属性であるため、 $("img", $(this)) として当該 img 要素を選択し、 attr メソッドを使用することで得られます。この URL を別の要素の src 属性へ設定する場合にも attr メソッドを使用出来ます。以上を行うと、質問文のコードは以下のようになり、選択した画像が別の要素へ表示されていることがわかります (動作確認用リンク)。

HTML

1<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> 2<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 3<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script> 4<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script> 5 6<div class="dropdown"> 7 <button type="button" class="btn btn-primary dropdown-toggle btn-lg" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">ヨットのクラスを選択</button> 8 <ul class="dropdown-menu"> 9 <li><button class="dropdown-item" value="laser"><img class="dropdown-img" src="https://placehold.jp/3d4070/ffffff/150x150.png?text=laser.PNG" alt="laser"></button></li> 10 <li><button class="dropdown-item" value="laser radial"><img class="dropdown-img" src="https://placehold.jp/3d4070/ffffff/150x150.png?text=laser_radial.PNG" alt="laser_radial"></button></li> 11 <li><button class="dropdown-item" value="laser_4.7"><img class="dropdown-img" src="https://placehold.jp/3d4070/ffffff/150x150.png?text=laser_4.7.PNG" alt="laser_4.7"></button></li> 12 <li><button class="dropdown-item" value="470"><img class="dropdown-img" src="https://placehold.jp/3d4070/ffffff/150x150.png?text=470.PNG" alt="470"></button></li> 13 <li><button class="dropdown-item" value="snipe"><img class="dropdown-img" src="https://placehold.jp/3d4070/ffffff/150x150.png?text=snipe.PNG" alt="snipe"></button></li> 14 <li><button class="dropdown-item" value="taser"><img class="dropdown-img" src="https://placehold.jp/3d4070/ffffff/150x150.png?text=taser.PNG" alt="taser"></button></li> 15 <li><button class="dropdown-item" value="optimist"><img class="dropdown-img" src="https://placehold.jp/3d4070/ffffff/150x150.png?text=optimist.PNG" alt="optimist"></button></li> 16 </ul> 17</div> 18 19<img id="newImg_boat">

jQuery

1$(function() { 2 $('.dropdown-menu .dropdown-item').click(function() { 3 var item = $("img", $(this)); 4 var src = item.attr("src"); 5 $("#newImg_boat").attr("src", src); 6 }); 7});

投稿2019/12/23 21:43

s8_chu

総合スコア14731

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

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

hiro-chan

2019/12/24 00:46

ありがとうございます。無事に画像を表示できました。 これでコーディングが前に進みます。 大変感謝いたします。
s8_chu

2019/12/24 01:33

解決されたようで良かったです。 マルチポスト先についても同様に、質問を解決済みにしておくと良いと思います。
hiro-chan

2019/12/24 04:35

ありがとうございます。
guest

0

JavaScript

1$(function(){ 2 $('.dropdown-menu .dropdown-item').click(function(){ 3 var visibleItem = $('.dropdown-toggle', $(this).closest('.dropdown')); 4 visibleItem.text($(this).attr('value')); 5 }); 6 });

この.click(function(){~~}); の中の $(this) はクリックされた要素なので、その要素から見て $(this).closest('.dropdown') は一番近い dropdown クラスをもつ親要素ですよね。
ここまで理解できていれば、あとはjQueryのリファレンスからやりたいことを実現できる関数を調べるだけだと思います。(実際、やり方は何種類もあります。)
参考1: Traversing - jQuery日本語リファレンス
参考2: Manipulation - jQuery日本語リファレンス

投稿2019/12/23 06:59

guissy-k

総合スコア245

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

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

hiro-chan

2019/12/23 07:45

コメントありがとうございます。 var visibleItem = $('.dropdown-toggle', $(this).closest('.dropdown'));の下に以下のようにコーディングしても取得できないです。対処がどうしたらいいかわかりません。 var visibleItem_img = $('.dropdown-toggle', $(this).closest('.dropdown').closest('.dropdown')); var visibleItem_img2 = visibleItem_img.text($(this).attr('src')); document.getElementById("newImg_boat").src = visibleItem_img2;
hiro-chan

2019/12/23 07:49

もしくは以下のコードを追加してもうまくいきません。 var visibleItem_img = $('.dropdown-toggle', $(this).closest('.dropdown')); visibleItem_img.text($(this).attr('src')); document.getElementById("newImg_boat").src = visibleItem_img;
hiro-chan

2019/12/23 08:07

もしくは以下のコードを挿入しても結果はうまくいきません。 var visibleItem_img = $('.dropdown-toggle', $(this).find('.dropdown-img')); var visibleItem_img2 = visibleItem_img.text($(this).attr('src')); document.getElementById("newImg_boat").src = visibleItem_img2;
guissy-k

2019/12/23 08:34

$('.dropdown-toggle', $(this).find('.dropdown-img')); ご提示いただいている上記の記載方法は、jQuery()関数の第2引数まで指定する方法ですよね。 https://api.jquery.com/jQuery/#jQuery-selector-context $(A, B) とした場合、「Bに該当する要素のうちAにも該当するもの」という形になるので > $('.dropdown-toggle', $(this).find('.dropdown-img')); こちらはおかしいことが分かります。 また、dropdown-img ではなくdropdown_img ですよね。 この辺りを踏まえて var visibleItem_img = $(this).find('.dropdown_img'); で実行してみてもらえますか? (私の方では再現環境を作っていないのでちゃんと動作するか分かりませんが)
hiro-chan

2019/12/23 09:03

ありがとうございます。 functionの中身を以下の通りにしましたが、表示されないようです。 var visibleItem = $('.dropdown-toggle', $(this).closest('.dropdown')); var visibleItem_img = $(this).find('.dropdown_img'); visibleItem.text($(this).attr('value')); document.getElementById("newImg_boat").src =visibleItem_img.text($(this).attr('src'));
hiro-chan

2019/12/23 09:05

以前はブラウザのF12ボタンのコンソールでエラーがでていましたが、それは改善しています。 少しずつ改善に向かっているようです。
hiro-chan

2019/12/24 00:48

解決に進む中で、this等の意味・使い方についてご教示いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問