1

我正在使用 JQuery.UI 日期选择器,但是需要应用一些更改来更新插件小部件,然后才能在我的 Web 应用程序中实际使用它。为了测试,我只需加载带有普通标签的 JQuery 和 datepicker 库,然后将修改代码放入它自己的标签中,最后我将 datepicker 的标签和初始化代码放入另一个标签中。当只有一页使用修改后的日期选择器时,这一切都有效。

现在我想开始在几个页面上使用修改后的数据,并且我不想在我使用它的每个地方都维护日期选择器的所有修改。我想做的是为 datepicker 创建一个包装文件,其中包括修改代码和使用 datepicker 所需的包含,然后在使用 datepicker 的页面中,我只包含包装脚本文件。

这一切都归结为在另一个包含的 javascript 文件中包含一个 javascript 文件。

我意识到这是其他一些问题的重复,但是当我在其他问题中尝试建议的修复程序时,例如 document.write 和 JQuery addScript 技术,它们似乎不适用于 Chrome . 我遇到的第一个问题是 addScript 函数告诉我在 JQuery 库深处存在问题,该库通常使用主文件中的标记加载。如果我注释掉 addScript 则不会发生错误。document.write 方法似乎运行了,但是没有一个 datepickers 工作。

我想知道如何最好地在另一个脚本加载中加载脚本,这样我就可以创建我的包装器,并且该解决方案需要在所有主要浏览器中工作。

所有这一切的问题是该过程必须适应使用 PHP + Ajax 创建的页面,但我首先想要一个纯 HTML + Javascript + JQuery + JQuery.UI Datepicker 解决方案工作。

如果这已经得到解答,并且适用于我在此处概述的限制,请指出该解决方案,请不要只说“重复问题”并将其留在那儿。我已经查看了这个论坛和其他论坛中的解决方案,并且看到了许多简单和更复杂的解决方案,这些解决方案根本不起作用或导致正确的错误。

如果标签确实支持嵌套包含,那就太好了,这一切都会容易得多,并且使用这个概念来支持包装器以隔离对基础库对象的覆盖是对象的全部意义所在。因此,支持和 css 包含的强大的跨浏览器技术确实已经过时了。如果它在那里,那么我错过了它,但据我所见,它并没有以“准备好迎接黄金时间”的方式出现。

谢谢,霍华德布朗

4

3 回答 3

3

你试过这样的事情吗?

var Loader = function () { }
Loader.prototype = {
    require: function (scripts, callback) {
        this.loadCount      = 0;
        this.totalRequired  = scripts.length;
        this.callback       = callback;

        for (var i = 0; i < scripts.length; i++) {
            this.writeScript(scripts[i]);
        }
    },
    loaded: function (evt) {
        this.loadCount++;

        if (this.loadCount == this.totalRequired && typeof this.callback == 'function') this.callback.call();
    },
    writeScript: function (src) {
        var self = this;
        var s = document.createElement('script');
        s.type = "text/javascript";
        s.async = true;
        s.src = src;
        s.addEventListener('load', function (e) { self.loaded(e); }, false);
        var head = document.getElementsByTagName('head')[0];
        head.appendChild(s);
    }
}

用法

var l = new Loader();
l.require([
    "example-script-1.js",
    "example-script-2.js"], 
    function() {
        // Callback
        console.log('All Scripts Loaded');
    });

您可以根据需要嵌套尽可能多的包含(每个包含在其各自的回调中),它们仍然可以工作。

归功于CSS Tricks的解决方案

于 2016-07-22T05:28:52.280 回答
0

我非常怀疑你会喜欢我的建议,但我还是试试看

创建一个名为includes.php

把所有的东西放在那个文件里

利用

<? include("includes.php"); ?>

需要的地方

这样,您可以将所有脚本放在一个文件中,并通过一行简单的代码将它们包含在任意数量的页面中

于 2016-07-22T05:07:12.000 回答
-1

您可以使用 git 系统本地存储库进行更改,以便在需要时进行一些合并。这就是我的建议。fork 原始分支,然后添加您的更改。这也称为补丁文件。

于 2016-07-22T05:08:14.627 回答