2012-02-20 21 views
10

problem ten pojawia się tylko w Joomla -Uncaught TypeError: nie można odczytać właściwość 'parametr nodeName' undefined

im próbuje użyć wtyczki contentflow z mojej strony joomla

to jest strona plugin - http://www.jacksasylum.eu/ContentFlow/

to jest moja strona - http://2-dweb.com/RND/

jak widać nie robi praca - to tylko pozostaje na etapie załadunku zawsze

po bliższym przyjrzeniu widzę, że jest problem z tym kodem:

if (this.content.nodeName == "IMG") { 
    CFobj._imagesToLoad++; 

    var foobar = function() { 
     CFobj._imagesToLoad--; 
     this.image = this.content; 
     this.setImageFormat(this.image); 
     if (CFobj.conf.reflectionHeight > 0) { 
      this.addReflection(); 
     } 
     this.initClick(); 
     CFobj._addItemCueProcess(true); 
    }.bind(this); 

    if (this.content.complete && this.content.width > 0) 
     window.setTimeout(foobar, 100); 
    else if (this.Browser.IE && !this.content.onload) { 
     var self = this; 
     var t = window.setInterval(function() { 
      if (self.content.complete && self.content.width > 0) { 
       window.clearInterval(t); 
       foobar(); 
      } 
     }, 10); 
    } 
    else 
     this.content.onload = window.setTimeout(foobar, 100); 
} 
else { 
    this.initClick(); 
    CFobj._addItemCueProcess(true); 
} 

}; 

z pierwszej linii - mówi „Uncaught TypeError: nie można odczytać właściwość«nodeName»undefined”

ale to rzecz działa na moim pliku html na pulpicie i na stronie wtyczki to samo!

dlaczego to działa na mojej stronie joomla? nie jest to sprawa konfliktu - im przy braku konfliktu i mam inne pluginy jquery, które działają

zmiana:

rob w pomógł mi ten błąd: „zmień pierwszą linię do if (this.content . & & this.content.nodeName == "IMG") {to rozwiązuje problem”

i tak było, ale teraz pojawia się kolejny błąd:

initClick: function() { 
     var cItem = this.clickItem; 
     this[this._activeElement].addEvent('click', cItem, false); 
    }, 

błąd - Uncaught TypeError: Nie można wywołać metody 'addEvent' z undefined

+0

Zmień pierwszą linię na 'if (this.content && this.content.nodeName == "IMG") {. To rozwiązuje problem. –

+0

OK naprawiono jeden problem, ale teraz na tym kodzie występuje problem: initClick: function() { var cItem = this.clickItem; this [this._activeElement] .addEvent ("kliknięcie", cItem, false); } mówi: "Uncaught TypeError: Can not call method" addEvent "of undefined" –

+0

Znaleziony identyczny problem podczas próby użycia z Railsami (3.2.15) - stosuje się nawet podczas używania przez gem 'contentflow'. –

Odpowiedz

9

Jak wyjaśnia błąd "Uncaught TypeError: Can not read property" nodeName "of undefined" Element nie jest dostępny, gdy skrypt próbuje uzyskać do niego dostęp. Możesz rozwiązać to na dwa sposoby.

  • Spróbuj owinąć do kodu dokumentem .ready.
  • Możesz sprawdzić, czy element jest dostępny przed uzyskaniem do niego dostępu. Aby to zrobić, użyj klauzuli if.
+0

Myślę, że JS w pliku mogło być już zapakowane w 'document.ready', ale na pewno sprawdzę. –

+0

Wygląda na to, że to nie to. Myślałem, że może to wiązać się z wiązaniami, ale to nie wydaje się mieć żadnego skutku. –

1

Załaduj skrypt tylko po załadowaniu wszystkich elementów do DOM.

Skrypt powinien być nazywany u dołu strony jak to

<html> 
    <head></head> 

    <body> 
    <!--HTML Elements here--> 

    <script type="text/javascript" src="yourScript.js"></script> 
    </body> 
</html> 

Jeśli jesteś użyciu jquery, można dołączyć plik skryptu w dowolnym miejscu na swojej stronie, jeśli jest on owinięty w document.ready, jak to:

$(document).ready(function(){ 

    // your code here.. 

}); 
1

Ważne jest, aby korzystać z class="content". Struktura powinna być:

<div class="ContentFlow" id="cover-menu"> 
     <div class="flow"> 
      <div class="item" > 
       <div class="content"> 
        //your stuff 
       </div> 
      </div> 
     </div> 
</div>