Javascript 为什么此代码没有';t工作(以及如何修理)?
这个问题是一个问题的结果 代码是:Javascript 为什么此代码没有';t工作(以及如何修理)?,javascript,jquery,Javascript,Jquery,这个问题是一个问题的结果 代码是: <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://ww
<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>
变量脚本=[
"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"
];
函数downloadJSAtOnload(){
对于(var i=0;i,在主体
中创建脚本
元素之后,在到达第一个$
之前,这些浏览器可能太慢,无法实际加载jQuery文件
为什么不在文档的head
中的script
标记中声明它们呢?您可以将脚本添加到文档体中(它们实际上应该在head中),但不必等到下载并执行它们后再访问$(文档)中的jQuery。就绪(…)
因此我预计这至少会在某些时候失败。您需要在不使用jQuery的情况下附加到文档onready
事件。单独导入jQuery示例
<script src="http://www.---.com/include/jquery-1.8.3.min.js"> </ script>
由于要将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
});
}
从document.ready()中删除您的函数然后将其添加到jQuery.js文件的末尾。这样,它只会在jQuery加载后运行。可能在脚本元素创建之后,在它们到达第一个$之前,它们太慢了,无法实际加载jQuery文件?为什么不在头中的脚本标记中声明它们呢?您正在异步加载脚本……没有任何限制在执行$
调用时,jQuery的加载方式。在您尝试访问$
时,脚本(包括jQuery)尚未加载。您证实了我的担心。但我如何解决问题?我不想使用脚本标记@d'alar'cop,因为我正试图跟随以延迟javascript的加载“那些浏览器可能太慢了”:这与浏览器速度无关。即使脚本会立即加载,在当前脚本执行终止之前也不会对其进行评估。JavaScript是单线程的,引擎不会停止当前正在运行的执行(以执行其他代码)@FelixKling Well OP报告说它可以在其他浏览器中工作。也许你关于“评估”的评论在不同的实现中有所不同-实际上需要的是JS函数等在调用时可用,对吗?我不知道。我无法想象这段代码如何在任何浏览器中工作,除非以任何其他方式包含jQuery(事先)由于某种原因,它在IE和Safari中失败了。@FelixKling是的,观点很好。我认为值得进行一些调查。无论如何,根据OP的信息(我们都知道,这通常是粗略的),这就是我认为的“答案”“不管怎样。我不认为脚本一定会按顺序加载。您必须侦听每个脚本,并在加载完所有脚本后运行回调。非常感谢您的回答Mahesh,我将尝试根据我的需要调整您的代码