3

我有 2 个外部 JavaScript 文件,它们都通过window.onload调用函数。文件冲突,所以只有第二个 js 文件在工作。

我将如何修复window.onload以使这两个功能都起作用?我应该在 HTML 文件中执行此操作,还是可以在其中一个 js 文件中修复它?

HTML 标头是:

<link type="text/css" rel="stylesheet" href="house.css" />
<style type="text/css"></style>
<script type="text/javascript" src="slideshow_library.js"></script>
<script type="text/javascript" src="slideshow.js"></script>
<script type="text/javascript" src="house.js"></script>

房子.js:

    var $ = function(id){
    return document.getElementById(id);
}

var calculateClick = function() {
    console.log("click, calculate click is running");
    //blahblahblah, lots of code
}

window.onload = function(rental){
    console.log("onload, javascript is running");
    console.log(rental);

    $("calculate").onclick = calculateClick;
}

第二个 window.onload 在 2 个 js 文件中:

幻灯片.js:

var slideShow;

window.onload = function (slideShow) {
    var params = {
        //blahblahblah lots of code
    }
}

幻灯片库.js:

var $ = function(id) { 
    return document.getElementById(id); 
}

var SlideShow = function( params ){
    //blahblah blah even more code
} 
SlideShow.prototype.displayImage = function(){
    //blahblah blah even more code
}
SlideShow.prototype.displayNextImage = function(){
    //blahblah blah even more code
}
SlideShow.prototype.displayPreviousImage = function(){
    //blahblah blah even more code
}
SlideShow.prototype.togglePlay = function(){
    //blahblah blah even more code 
}
4

2 回答 2

10

不要使用旧的window.onload事件模型。这不是很灵活——正如你所注意到的——并且不再需要浏览器支持。

jQuery 让这一切变得简单;在每个 JS 文件中更改window.onload = function为。$(function)

纯 JS 解决方案:将其更改为window.addEventListener('load', function).

于 2014-07-20T04:16:55.400 回答
0

如果您被允许/熟悉使用 JQuery,它会像这样完成:

$(window).on('load', function() {
    //<-- do the rest here..
});

如果你还在寻找纯 js,试试这个例子,它没有打开,window.onload而是使用document.readyState

第一个.js

(function(window, document) {
    var t = setInterval(function() {
        if('complete' === document.readyState) {
            clearInterval(t);
            alert('first js loaded ...');
        }
    }, 10);
})(window, document);

最后一个.js

(function(window, document) {
    var t = setInterval(function() {
        if('complete' === document.readyState) {
            clearInterval(t);
            alert('last js loaded ...');
        }
    }, 10);
})(window, document);

在这里找到 git repo

于 2014-07-20T03:51:42.337 回答