为什么这段代码不起作用(以及如何修复它)?
这个问题是我的另一个问题的结果。
代码是:
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;
生成的错误是“未捕获的ReferenceError:$未定义” 。
奇怪的是,在许多浏览器和版本中,一切都很完美(幻灯片,灯箱,…)。 只是在IE8和Safari 4中,向用户显示警报。
由于您是动态地将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 }); }
这些浏览器在到达第一个$
之前在body
中创建script
元素之后实际加载jQuery文件可能太慢$
。
为什么不在文档head
的script
标记中声明它们?
您将脚本添加到文档正文(它们应该在头脑中)但是在$(document).ready(...)
访问jQuery之前不要等待它们下载和执行,所以我希望这样做至少在某些时候失败了。 您需要在不使用jQuery的情况下附加到文档onready
事件。
单独导入jquery示例
将您的函数从document.ready()中取出并将其添加到jQuery.js文件的末尾。 这样它只会在jQuery加载后运行。