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,我将尝试根据我的需要调整您的代码