2017-05-04 12 views
0

の子が見つからない場合は、クラス名が.slideshow-dotsのdivから子を取得できません。ここでの子供を持つdiv要素です:何らかの理由で、要素

<div class="slideshow-dots"> 
<span class="dot"></span> 
<span class="dot"></span> 
<span class="dot"></span> 
<span class="dot"></span> 
</div> 

が、これは誤りである:以下

Uncaught TypeError: Cannot read property 'className' of undefined

が私のコードですが、私はまた、公共メソッド showSlidesを呼び出すことができないんです。

(function($) { 
    $.fn.MarvSimpleGallery = function(options) { 
     var instance = this; 
     instance.index = 1; 

     var settings = $.extend({ 
     // These are the defaults. 
     arrows: true, 
     dots: true, 
     numbers: true 
     }, options); 

     var init = function() { 
     instance.dotCont = instance.find('.slideshow-dots')[0]; 
     instance.slides = instance.find('.mySlides'); 

     // Assign event listeners 
     instance.find('.prev').click(function() { instance.showSlides(instance.index += -1); }); 
     instance.find('.next').click(function() { instance.showSlides(instance.index += 1); }); 

     // Initiate dot controls 
     $.each(instance.slides, function(index, data) { 
      var dot = $('<span></span>'); 
      dot.addClass('dot'); 
      dot.click(function() { instance.showSlides(instance.index = (index + 1)); }); 

      $(instance.dotCont).append(dot); 
     }); 

     // Show initial slide 


     }(); 

     instance.showSlides = function(n) { 
     console.log('Slide: ' + n); 
     if (n > (instance.slides).length) instance.index = 1; 
     if (n < 1) instance.index = (instance.slides).length; 

     var slideCount = (instance.slides).length; 

     $.each(instance.slides, function(index, data) { 
      data.style.display = "none"; 
      $(data).prepend($('<div></div>').addClass('numbertext').append((index + 1) + '/' + slideCount)); 
     }); 

     instance.slides[instance.index-1].style.display = "block"; 
     $(instance.dotCont).find('dots')[instance.index-1].className += " active"; 
     }; 

    } 
    }(jQuery)); 
+0

でなければならない、 'instance.index-1 'は有効なキーではありませんあなたのコードの最後の行のコレクションのために。実例を共有する(jsfiddle、stacksnippets、codepen ....) –

+0

私たちを助けて、どのラインがエラーを投げているかのヒントを教えてください。 –

+1

別の質問:jQueryとvanilla JSを混ぜる理由 –

答えて

5

は、要素がクラスのドット」を持っていない 'ドット' の代わりに

$(instance.dotCont).find('dots')[instance.index-1].className += " active"; 

あなたの子供の

$(instance.dotCont).find('dot')[instance.index-1].className += " active"; 

を試してみてください。

編集は - コメントで言ったように:

私はドットを忘れてしまった: 最後の文は、いくつかの時点で

$(instance.dotCont).find('.dot')[instance.index-1].className += " active"; 
+2

なぜこのコードがOPに役立つのかの説明を追加してください。これにより、今後の視聴者からの回答が得られます。詳細については、[このメタ質問とその回答](http://meta.stackoverflow.com/q/256359/215552)を参照してください。 –

+0

そのコードは、 'class = dot'子要素ではなく、' '子要素を検索します。 –

関連する問題