0
...
<head>
    <script type="text/javascript" src="a.js"></script>
</head>
<body>
    <button id="test">click me</button>
    <script type="text/javascript">
        show();
        document.getElementById('test').onclick=function(){
            show();
        }
    </script>
</body>
</html>

上面的代码:

我把标签a.js放在<head>标签里,a.js里面有一个b.js

document.getElementsByTagName('head')[0].appendChild(document.createElement('script'));  function show(){...} 

在 b.js 中;

现在我想show()在b.js中调用which,但是出错了,因为b.js没有加载;

我想添加一些代码来阻止页面加载。

while(){} ?


实际上,我了解到 b.js 应该在调用函数 show 时加载;

但是点击事件呢?另外,我必须把 show() 放在页面中。

现在,我将另一个 js(base.js) 放入 head 标签中,上面的代码将是这样的:

...
<head>
<script type="text/javascript" src="base.js"></script>
<script type="text/javascript" src="a.js"></script>
</head>
<body>
    <button id="test"></button>
    <script type="text/javascript">
        //invoke button click event from base.js and b.js
    </script>
</body>
...

比如base.js和b.js绑定了两个click事件(通过a.js加载ansync),当用户点击页面中的按钮时,base.js中绑定的事件会立即被调用,然后。 ..错误...

我必须将调用者放在 body 标记中。

4

3 回答 3

1

您将不得不等到b.js加载。

jQuery的方法:

$("<script>").attr("src","b.js").appendTo("head").load(show);

原生 JavaScript:

var ele = document.createElement('script');
ele.src = "b.js";
document.getElementsByTagName('head')[0].appendChild(ele);
ele.addEventListener("load",show,false);
于 2012-05-13T05:34:00.320 回答
0

为什么不阻止页面加载,而不是onload在窗口事件上运行代码?

window.onload = function() {
    show();
};
于 2012-05-13T05:33:45.330 回答
0

您可以在从该脚本执行任何操作之前收听 onload 事件以确保它们已加载。

//a simple script loader
function loadScript(url,callback){
    var s = document.createElement('script');                    //new script
    var document.getElementsByTagName('head')[0].appendChild(s); //append to head
    s.onload = function(){                                       //add onload
        callback();                                              //callback when done
    }
    s.src = url;                                                 //start download
}

//load b.js and run "show()" when b.js is loaded
loadScript('b.js',function(){
    show();
});
于 2012-05-13T05:33:52.620 回答