Uncaught TypeError: Не удается прочитать свойство 'nodeName' из undefined
эта проблема появляется только в joomla -
im пытается использовать плагин contentflow с моим сайтом joomla
это сайт плагина - http://www.jacksasylum.eu/ContentFlow/
это мой сайт - http://2-dweb.com/RND/
поскольку вы можете видеть, что он не работает - он просто остается на этапе загрузки навсегда
при ближайшем рассмотрении я вижу, что есть проблема с этим кодом:
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);
}
};
с первой строкой - он говорит: "Uncaught TypeError: невозможно прочитать свойство" nodeName "из undefined"
но эта вещь работает на моем рабочем столе html файле и на сайте плагина он сам!
почему он не работает на моем сайте joomla?
это не конфликтная вещь - я использую без конфликтов, и у меня есть другие плагины jquery, которые работают
обновление:
rob w помог мне с этой ошибкой:
"Измените первую строку на if (this.content && this.content.nodeName ==" IMG ") {. Это решает проблему"
и это произошло, но теперь появляется еще одна ошибка:
initClick: function () {
var cItem = this.clickItem;
this[this._activeElement].addEvent('click', cItem, false);
},
ошибка - Uncaught TypeError: не удается вызвать метод 'addEvent' из undefined
Ответы
Ответ 1
Как объясняется ошибка "Uncaught TypeError: невозможно прочитать свойство" nodeName "из undefined" Этот элемент недоступен, когда script пытается получить к нему доступ. Вы можете решить это двумя способами.
- Попробуйте обернуть код с помощью document.ready.
- Вы можете проверить, доступен ли элемент перед его доступом. Чтобы сделать это, используйте предложение if.
Ответ 2
Загрузите script только после загрузки всех элементов в DOM.
Ваш script должен быть вызван в нижней части страницы, как этот
<html>
<head></head>
<body>
<!--HTML Elements here-->
<script type="text/javascript" src="yourScript.js"></script>
</body>
</html>
Если вы используете jquery, вы можете включить файл script в любом месте вашей страницы, если он завернут в document.ready
, например:
$(document).ready(function(){
// your code here..
});
Ответ 3
Важно, чтобы вы использовали class="content"
. Структура должна быть:
<div class="ContentFlow" id="cover-menu">
<div class="flow">
<div class="item" >
<div class="content">
//your stuff
</div>
</div>
</div>
</div>