• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problemy z funkcją IIFE. "Is not a function"?!

0 głosów
529 wizyt
pytanie zadane 14 marca 2016 w JavaScript przez artimal Gaduła (4,800 p.)
edycja 14 marca 2016 przez artimal

Cześć, mam problemz funkcją IIFE. Nie wiem dlaczego odwołanie się do istniejącego elementu tablicy wywołuje error:
Uncaught TypeError: elements[i].find is not a function (linia 48)
Dlaczego dzieją się takie cuda? Jak to naprawić? Wrzucam też osobno kod:

​
var elements = $(".Wallop2").find(".Wallop-item");
var x = elements.length;
$(".loading").load('img/icons/loading.svg');
var wavesurfer = [];
for (var i = 0; i < x; i++) {(function(i){
  var song = i * 2 + 1;
  var str1 = song.toString();
  var str2 = "#waveform";
  var waveform1 = str2.concat(str1);
  song = song + 1;
  str1 = song.toString();
  var waveform2 = str2.concat(str1);

  wavesurfer[i*2] = WaveSurfer.create({
    container: waveform1,
    waveColor: '#5C6366',
    progressColor: 'white',
    height: 100,
    normalize: 1
});

  wavesurfer[i*2+1] = WaveSurfer.create({
    container: waveform2,
    waveColor: '#5C6366',
    progressColor: 'white',
    height: 100
});
  wavesurfer[i * 2].load("audio/before" + song + ".mp3");


  wavesurfer[i * 2].on("ready", function f(x) {
    wavesurfer[i * 2 + 1].load("audio/after" + song + ".mp3");
  });

  var graj = 1; // 1 czy 2 kawałek grać czyli wersję przed czy po obróbce.
  var time = 0;
  var playornot = 0; // Play-Pause

  wavesurfer[i * 2].on("seek", function f(x) {
    time = wavesurfer[i * 2].getCurrentTime();
  });

  wavesurfer[i * 2 + 1].on("seek", function f(x) {
    time = wavesurfer[i * 2 + 1].getCurrentTime();
  });

  wavesurfer[i * 2 + 1].on("ready", function f(x) {
    elements[i].find(".loading").remove();
    elements[i].find(".example").addClass("flip");
    elements[i].find(waveform1).removeClass("ukryj");
    elements[i].find(".play").load('img/icons/play.svg');
    elements[i].find(".after").load('img/icons/after.svg');
  });

  })( i );
}

HTML:
 

<div class="Wallop2 Wallop--slide">
<div class="Wallop-list" style="padding: 25px;">



<div class="Wallop-item">
<div class="client">
<div class="image" id="avatar3"></div>
<div class="name">Mike Woods</div>
<div class="country">Australia</div>
<div class="cytat"><div class="quote"></div><p style="text-indent: 0px;"></p></div>
<div class="example">
    <div class="loading"></div>
    <div class="play"></div>
    <div class="after"></div>

    
    <div class="wave">
        <div id="waveform3" class="ukryj"></div>
        <div id="waveform4" class="upwave ukryj"></div>
    </div>

</div>
</div>
</div>




<div class="Wallop-item">
<div class="client">
<div class="image" id="avatar1"></div>
<div class="name">dfdf</div>
<div class="country">Polska</div>
<div class="cytat"><div class="quote"></div><p style="text-indent: 0px;">uuu</p></div>
<div class="example">
    <div class="loading"></div>
    <div class="play"></div>
    <div class="after"></div>
    <div class="wave">
        <div id="waveform1" class="ukryj"></div>
        <div id="waveform2" class="upwave ukryj"></div>
    </div>
</div>
</div>
</div>


<div class="Wallop-item">
<div class="client">
<div class="image" id="avatar2"></div>
<div class="name">yyy</div>
<div class="country">Polska</div>
<div class="cytat"><div class="quote"></div><p style="text-indent: 0px;">xxx</p></div>
<div class="example">
    <div class="loading"></div>
    <div class="play"></div>
    <div class="after"></div>

    
    <div class="wave">
        <div id="waveform5" class="ukryj"></div>
        <div id="waveform6" class="upwave ukryj"></div>
    </div>

</div>
</div>
</div>

  </div>
  <div class="Wallop-buttonPrevious prev"></div>
  <div class="Wallop-buttonNext next"></div>
</div>
</section>
</div>
</div>

 

2 odpowiedzi

0 głosów
odpowiedź 14 marca 2016 przez ScriptyChris Mędrzec (190,170 p.)
A coś takiego działa? Bo błąd już się nie pokazuje (albo nie ogarniam codepena :P )

http://codepen.io/anon/pen/KzNdyR?editors=1010
komentarz 14 marca 2016 przez artimal Gaduła (4,800 p.)
www.amalamastering.com -> KONSOLA :)
komentarz 14 marca 2016 przez ScriptyChris Mędrzec (190,170 p.)

Nie zmieniłeś "i" na "e" i nie zrobiłeś w IIFE return function... Ja zamieniłem i > e oraz zwróciłem funkcję wewnątrz IIFE - przyjrzyj się kodowi na Codepen :) 

Ja widzę inny kod (u Ciebie VS na codepen ode mnie) :D http://imgur.com/uxyTfPB

komentarz 14 marca 2016 przez artimal Gaduła (4,800 p.)
Niestety ta wersja nie działa, mimo, że error zniknął.
komentarz 14 marca 2016 przez ScriptyChris Mędrzec (190,170 p.)

Czy na pewno prawidłowo podpiąłeś tego WaveSurfer w HTML?

Bo ten kod chyba działa (tzn. brak błędów i console.log pokazuje obiekt jakiś z tej funkcji)

http://codepen.io/anon/pen/KzNdyR?editors=1011

Na codepen podpiąłem ten plugin w ten sposób (link z głównej strony pluginu):

<script src="//cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.0.52/wavesurfer.min.js"></script>

komentarz 14 marca 2016 przez artimal Gaduła (4,800 p.)
Tak, pobrałem tą wtyczkę i trzymam plik min.js na serwerze. Działało to już wcześniej ale dla pewności podpiąłem źródło zewnętrzne - efekt ten sam czyli niestety nadal nie działa.
0 głosów
odpowiedź 14 marca 2016 przez artimal Gaduła (4,800 p.)
Kod ma za zadanie wyszukiwać elementy wallop-item i w pętli for konstruować obiekty i umieszczając je w tablicy i definiować obsługę zdarzeń wtyczki wavesurfer.js.

Podobne pytania

0 głosów
2 odpowiedzi 720 wizyt
pytanie zadane 2 lutego 2017 w JavaScript przez Alex.Ironside Stary wyjadacz (14,920 p.)
0 głosów
1 odpowiedź 599 wizyt
pytanie zadane 2 czerwca 2023 w JavaScript przez DzikieHarce Użytkownik (690 p.)
0 głosów
1 odpowiedź 1,125 wizyt

93,776 zapytań

142,736 odpowiedzi

323,388 komentarzy

63,381 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...