jquery - 无冲突模式下的 getScript

标签 jquery getscript

由于 WordPress 在非冲突模式下加载 jQuery,我必须将脚本包装在 jQuery(function($){...})

父脚本按预期执行。 但是,我通过 getScript 有条件地加载第二个脚本:

$.getScript('js/2nd.js').done(function() {
   editElem();
});

我还需要将所有内容包装在“2nd.js”中吗?如果我不这样做,什么也不会发生——甚至 Chrome 控制台中也不会抛出错误。如果我将其包装起来,它会显示“editElem 未定义” - 尽管我的“2nd.js”当然定义了它。

感谢您的见解。

最佳答案

最好还是将其包装起来 - 无冲突模式的目标是让您的代码保持工作,即使 $ 变量被另一个库占用。不过,正如您所发现的,一旦全局函数位于闭包内,它们就不再是全局的了!

全局变量并不被认为是 JavaScript 最好的成就,这个例子就是一个很好的例子;像 RequireJS 这样的模块加载器(可能是 extended for lazy loading ?)可以让以后的生活变得更轻松。

也就是说,如果您只有两个文件并且只想从 2nd.js 导出函数,则无需任何额外的库即可做到这一点:

(function ($) {
    // ... define your functions
    function editElem () {
    }
    function otherFunc () {
    }
    function privateFunc () {
    }

    // export any functions needed by scripts outside this file.
    window.LazyUtils = {
        editElem: editElem,
        otherFunc: otherFunc
    };
}( jQuery ));

之后,您应该能够从第一个 JS 文件、控制台或任何地方调用 LazyUtils.editElem()。由您决定如何命名该模块 - “LazyUtils”只是一个示例。

关于jquery - 无冲突模式下的 getScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29194551/

相关文章:

javascript - 每次打开类 div 时,使 .delay() 和 .animate() 函数重新运行

javascript - 使用 $.getScript (jquery) : code is not executed

javascript - 未捕获的 TypeError : $. getScript(...).done 不是函数

javascript - 获取具有相同 ID 和名称的输入值

jquery - Flash 播放器位于 div 之外(仅在 IE 中)

javascript - 在我的 Meteor 应用程序中哪里包含 Parse 初始化 key ?

javascript - 单击“注销”使 session 无效并关闭浏览器选项卡

javascript - $.getscript 在使用 swup 库时创建多个调用

jquery - 'SyntaxError : expected expression, 从 $.getScript 得到 <'

jquery - 我可以在没有回调的情况下使用 jquery getScript() 吗?