0

下午好

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

当我将所有脚本放在单独的文件中时,IE 占位符脚本正在工作。

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

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

但是,当我这样做时,IE 表单修复程序停止工作。所以现在我认为我有 onload 函数的冲突。所以为了帮助清理事情,我将所有不同的脚本组合成一个

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

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

4

1 回答 1

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 })

就在闭包函数中。

于 2013-07-02T16:19:38.930 回答