这个问题是another question of mine的结果。
代码是:
<script type='text/javascript'>
var scripts = [
"http://www.---.com/include/jquery-1.8.3.min.js",
"http://www.---.com/include/functions.js",
"http://www.---.com/include/myjs.js",
"http://www.---.com/include/plugins/bxslider/bxslider.js"
];
function downloadJSAtOnload() {
for( var i=0; i<scripts.length; i++ ) {
var element = document.createElement('script');
element.src = scripts[i];
document.body.appendChild(element);
}
$(document).ready(function(){
$('#mainslide .bxslider').bxSlider({
slideWidth: '960',
mode: 'vertical',
speed: '500',
captions: false,
pager: false,
controls: false,
nextText: 'Next',
prevText: 'Prev',
auto: true,
autoHover: true,
pause: 3000
});
});
}
if (window.addEventListener) window.addEventListener('load', downloadJSAtOnload, false);
else if (window.attachEvent) window.attachEvent('onload', downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
生成的错误是“未捕获的ReferenceError:$未定义”。
奇怪的是,在许多浏览器和版本中,一切都完美无缺(幻灯片,灯箱,...)。只需在IE8和Safari 4中,就会向用户显示警报。
答案 0 :(得分:2)
由于您要将JS库动态添加到文档中,因此在加载脚本后需要一个回调函数才能初始化bxSlider。理想情况下,应在bxSlider加载后调用回调。
element.setAttribute("type","text/javascript");
element.onload = callBackFunction;
document.body.appendChild(element);
var callBackFunction() {
$('#mainslide .bxslider').bxSlider({
slideWidth: '960',
mode: 'vertical',
speed: '500',
captions: false,
pager: false,
controls: false,
nextText: 'Next',
prevText: 'Prev',
auto: true,
autoHover: true,
pause: 3000
});
}
答案 1 :(得分:0)
在script
创建body
元素之前,这些浏览器实际加载jQuery文件的速度可能太慢,才能到达第一个$
。
为什么不在文档script
的{{1}}标记中声明它们?
答案 2 :(得分:0)
您将脚本添加到文档正文(它们应该在头部)但是在$(document).ready(...)
访问jQuery之前不要等待它们下载和执行,所以我希望这至少会失败一些时间。您需要在不使用jQuery的情况下附加到文档onready
事件。
答案 3 :(得分:0)
单独导入jquery示例
<script src="http://www.---.com/include/jquery-1.8.3.min.js"> </ script>
答案 4 :(得分:0)
将您的函数从document.ready()中取出,并将其添加到jQuery.js文件的末尾。这样它只会在jQuery加载后运行。