将几个java脚本组合到一个.js文件中,现在具有冲突的onload函数

Combined several javascripts into single .js file, now having conflicting onload functions

本文关键字:函数 onload 冲突 一个 脚本 java 几个 组合 js 文件      更新时间:2023-09-26

下午好

我遇到了一个问题,我有三个脚本——一个URL Force,一个传递特定变量的脚本,最后是我在StackOverflow上找到的一个非常棒的IE占位符脚本。

当我把所有的脚本都放在单独的文件中时,IE占位符脚本就可以工作了。

然后a意识到其他两个脚本没有被调用,所以我在body标签中进行了一个onload调用

onload="onLoad(); switchToHTTPS();"

然而,当我这样做时,IE Form修复程序停止了工作。所以现在我想我有一个onload函数的冲突。因此,为了帮助清理,我将所有不同的脚本组合成一个

http://jsfiddle.net/qtmvL/1/

如何使每个脚本在页面加载时自动运行?并且没有任何冲突?

我建议的第一件事是引入一些闭包。您将所有内容都设置在全局范围内,但我建议将它们分离到自己的范围内。

看看这里。http://jsfiddle.net/2YGtz/

这里的基本思想是,我们将分解每个部分,并让每个部分返回一个"onload"函数

var ieFix = (function () {
    var load = function () {
        //Do your load operations here...
    };
    return {
        //Return your ieFix onload function so it can be accessed in the global scope
        onLoad: load
    };
})(); //Note the parens here. This will execute the function right away, which will
      //declare and return the onload function right away, so you can access it when
      //when you declare your "window.onload" function below.
var passVar = (function () {
    var load = function () {
        //Do your passVar load operations here
    };
    return {
        //Return your passVar onload function
        onLoad: load
    };
})();
//Create a combined "window.onload" function now.
window.onload = function () {
    ieFix.load();
    passVar.load();
};

查看我所做的评论,并注意变量x.的各种声明的描述

第二次编辑

$(document).load(function () {
    //Load function here...
})

$(document).load()方法的好处是,每次传入函数时,它都会将其添加到onload函数中,而不是覆盖该函数。如果onload事件已经触发,它只会立即调用该函数。因此,与其返回加载函数,不如只执行

$(document).load(function () { //load stuff })

就在闭包函数中。