【发布时间】:2011-10-05 15:11:12
【问题描述】:
我正在尝试在网页加载后通过单击按钮动态加载一个封面流类型对象(认为 iTunes 封面流但不那么花哨)。我正在动态创建一个图像列表,以提供给coverflow的javascript,然后加载它们并让它看起来很漂亮。问题是在 Firefox 中代码可以正常工作,但在 chrome 和 ie(惊喜)中,javascript 抛出错误,并且由于下面的错误抛出,页面变为空白。问题在于这段代码试图通过 id 捕获 dom 元素
if (typeof(this.Container) == 'string') { // no node
var container = document.getElementById(this.Container);
if (container) {
this.Container = container;
} else {
throw ('ContentFlow ERROR: No element with id \''+this.Container+'\' found!');
return;
}
}
几乎在 chrome 中,当 dome 元素在页面中肯定可用时,上面的代码不会捕获它。我什至在 chrome 的控制台中输入了document.getElementById("container_name");,它返回了元素,所以我不知道它在文件中不起作用。
任何建议都会被欣赏
谢谢
编辑:
这是试图填充的页面 html
<div id="contentFlow" class="cool_ui ContentFlow">
<p id="coverflow_school_name"></p>
<div class="loadIndicator"><div class="indicator"></div></div>
<div class="flow" style="height:240px;"></div>
<div class="scrollbar">
<div class="slider"></div>
</div>
</div>
回答:
哇,好的。我想到了。问题是在调用那段代码之前动态加载某些资源的方式。资源加载导致页面变为空白,从而使 var container = document.getElementById(this.Container); return null 因此抛出异常。奇怪的是 Firefox 可以处理资源加载,但 chrome 不能。
感谢您的帮助
【问题讨论】:
-
typeof是操作符,不是函数,去掉括号 -
您能否发布与此相关的 HTML 或在 fiddle 中复制它?
-
我想我们可能需要一个完整的例子。代码应该可以工作,但也许你有某种竞争条件,关于在函数触发时元素是否已经加载,或者其他什么。
标签: javascript jquery firefox dom google-chrome