###【目的】
ボタンクリック時に、スライダーで表示中の画像srcを取得したいです。(>_<)
その画像srcをラジオボタンのvalueに挿入しているのですけれど、どうしても画像srcが取得できません。
###【試しているコード】
下記コード8行目var src = $(this).parent().find('.slide img').attr('src');
を試してみました。
しかし、表示中の画像srcでなく、スライダー1枚目の画像srcが取得されてしまいます。
現状の動作、図、コードを貼っておきますので、ご確認頂ければ幸いです。
■現状の動作↓
https://jsfiddle.net/3pe0j501/27/
■現状のコード↓
html
1<!-- 【スライダー】 --> 2<p class="func">▼画像スライダー</p> 3<section id="AB"> 4<section id="A"> 5 <div class="slider"> 6 <div class="slideSet"> 7 8 <div class="slide">neko1<img src="http://example.com/wp-content/themes/theme-child/images/neko1.jpg" class="img"></div> 9 10 <div class="slide">neko2<img src="http://example.com/wp-content/themes/theme-child/images/neko2.jpg" class="img"></div> 11 12 </div> 13 </div> 14 <div class="btn">ボタン</div> 15</section> 16 17<section id="B"> 18 <div class="slider"> 19 <div class="slideSet"> 20 21 <div class="slide">inu1<img src="http://example.com/wp-content/themes/theme-child/images/inu1.jpg" class="img"></div> 22 23 <div class="slide">inu2<img src="http://example.com/wp-content/themes/theme-child/images/inu2.jpg" class="img"></div> 24 25 <div class="slide">inu3<img src="http://example.com/wp-content/themes/theme-child/images/inu3.jpg" class="img"></div> 26 27 </div> 28 </div> 29 <div class="btn">ボタン</div> 30</section> 31</section> 32 33<!-- 【ラジオvalue連動】 --> 34<p class="ques">▼valueを表示中の画像ファイル名にしたい</p> 35<input class='abc' type=radio value='ボタンクリック前' checked><span>value=</span><span id="output"></span>
javascript
1////ボタンクリックしたときの機能 2(function($){ 3$(document).ready(function(){ 4 5 $(".btn").click(function(){ 6 7 // 表示中の画像srcを取得したいのに、最初の画像srcしか取得できない 8 var src = $(this).parent().find('.slide img').attr('src'); 9 10 // 取得したsrcをvalueに挿入 11 var splittedUrl = src.split('/') 12 document.getElementsByClassName("abc")[0].value = splittedUrl[splittedUrl.length - 1].split('.')[0]; 13 14 }) 15 16}); 17})(jQuery); 18 19 20////検証のためのvalue表示 21var target = document.getElementsByClassName("abc")[0]; 22var output = document.getElementById("output"); 23setInterval(function(){ 24output.innerHTML = target.value; 25},10); 26 27 28////スライダー機能 29(function(){ 30 31// 初期設定 32$('.slideSet').each(function(index,element){ 33 var $this = $(element); 34 var $slides = $this.find('.slide'); 35 $this.data('slideWidth' , $slides.eq(0).outerWidth()); 36 $this.data('slideNum' , $slides.length); 37 $this.data('slideSetWidth' , 38 $slides.eq(0).outerWidth() * $this.data('slideNum') ); 39 $this.css('width', $this.data('slideSetWidth')); 40 41 $this.data('slideCurrent', 0); 42 43}); 44 45 // アニメーションを実行する独自関数 46 var sliding = function($this){ 47 48 var slideCurrent = $this.data('slideCurrent'); // クリックした要素の現在地 49 var slideNum = $this.data('slideNum'); 50 var slideWidth = $this.data('slideWidth'); 51 52 // slideCurrentが0以下だったら 53 if( slideCurrent < 0 ){ 54 slideCurrent = slideNum - 1; 55 56 // slideCurrentがslideNumを超えたら 57 }else if( slideCurrent > slideNum - 1 ){ // slideCUrrent >= slideNumでも可 58 slideCurrent = 0; 59 60 } 61 62 $this.stop().animate({ 63 left: slideCurrent * -slideWidth 64 }); 65 66 $this.data('slideCurrent' , slideCurrent); // 移動したので再代入 67 } 68 69 // 画像が押されたとき 70 $('.slideSet').click(function(){ 71 var $this = $(this); 72 73 var num = $this.data('slideCurrent') + 1; 74 // $('body').append('<p>'+num+'</p>'); 75 $this.data('slideCurrent',num); 76 sliding($this); 77 }); 78 79}());
css
1/*スライダーのCSS*/ 2.slide { 3 width: 100px; 4 height: 50px; 5 border: 1px solid #888; 6} 7img { 8 width: 100px; 9 height: 50px; 10} 11.slideSet > div { 12 width: 100px; 13 height: 50px; 14 box-sizing: border-box; 15 } 16 17 .slide { 18 float: left; 19 } 20 21 .slideSet { 22 position: absolute; 23 } 24 25 .slider { 26 width: 100px; 27 height: 50px; 28 overflow: hidden; 29 position: relative; 30 } 31 32/*装飾のCSS*/ 33#AB { 34 display: flex; 35} 36#A, #B { 37 margin: 0 20px 0 0px; 38} 39.btn { 40 background: #0a7cff; 41 width: 100px; 42 border-radius: 10px; 43 color: #FFF; 44 font-weight: bold; 45 text-align: center; 46 margin: 10px 0 0px 0; 47 cursor: pointer; 48} 49.ques { 50 background: #FF6565; 51 padding: 5px; 52} 53.func { 54 background: #ddd; 55 padding: 5px; 56}
以上です。
長くなってしまってスミマセン。
どうぞよろしくお願いいたします。m(_ _)m
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/02 07:07
2018/03/02 07:19
退会済みユーザー
2018/03/02 07:44 編集
2018/03/02 07:36
退会済みユーザー
2018/03/02 07:44
2018/03/02 07:53
退会済みユーザー
2018/03/02 08:11
2018/03/02 08:12
退会済みユーザー
2018/03/02 08:14
退会済みユーザー
2018/03/02 08:16
2018/03/02 08:24
退会済みユーザー
2018/03/02 08:34
2018/03/02 08:39
退会済みユーザー
2018/03/02 08:57
2018/03/02 09:27
退会済みユーザー
2018/03/02 09:52
2018/03/02 10:06
退会済みユーザー
2018/03/02 10:40
2018/03/02 11:33
退会済みユーザー
2018/03/02 12:38 編集
2018/03/02 12:13 編集
退会済みユーザー
2018/03/02 12:44
2018/03/02 12:56
退会済みユーザー
2018/03/02 12:57
2018/03/02 13:30