Javascript 模块,在可能未加载时传递 jQuery

标签 javascript jquery internet-explorer-8 module

我正在学习 javascript 的模块模式,以便整理我的代码并减少对长“全局”javascript 文件的需求。 因此,我在同一个文件中有一个顶级“命名空间”模块和一个实用程序模块。实用程序模块有一些功能需要 jquery,而另一些则不需要。

在不使用 jQuery 的轻量级页面上,我不想加载库(我有充分的理由不这样做)。 当 jQuery 作为参数传递给模块时会出现问题,如下所示:

MODULE.vars = (function (variables,$) {
   variables.cdn = undefined; //global for clientside cdn
   variables.version = undefined; //global for clientside cdn version
   variables.isTouchScreen = undefined; //global for touchscreen status

   //Check if jquery exists, if so patch the jquery dependent functions
   if ($) {
       $(document).ready(function () {
           variables.isTouchScreen = $('html').is('.touch');
       });
   }

   return variables;

}(MODULE.vars || {}, jQuery));

代码在我未加载 jquery 的页面上停止,说明 jQuery 未定义 - 很公平。如果我将最后一行更改为:

}(MODULE.vars || {}, jQuery || false));

代码仍然提示 jQuery 未定义。我想,也许是错误的,如果 jQuery 是未定义的,它会在这个实例中作为未定义传递,而不是占用值 false(无论如何逻辑指示都没有必要)。

当 jQuery 可能存在或不存在时,我该如何解决这个问题?我试图将以下内容放在脚本的顶部:

var jQuery = jQuery || false;

认为如果它被加载,这将占用 jQuery 的值(value)。它适用于现代浏览器,但 IE8 会提示,因为即使 jQuery 首先加载到页面上,它也会被设置为 false。

脚本都以正确的顺序加载到 html 中,首先是 jQuery,然后是我的模块。

检查原因时,IE8 返回 $ 作为对象,jQuery 返回 false。如果我没有在脚本中设置以上行,jQuery 将返回与 $ 相同的对象。

很遗憾,我也需要满足 IE8 的要求,那么我该如何解决这个可选的 jQuery 存在问题呢?

编辑:这只是该模块的一个片段,还有其他依赖于 jquery 的功能,但如果 jquery 不可用,则根本不会实现

最佳答案

在我弄清楚如何实现 elanclrs 建议后,我似乎找到了一个可行的答案 - 我将以下内容放在我的模块顶部:

var jQ = jQ || false;
   if (typeof jQuery !== 'undefined') {
   jQ = jQuery;
}

然后在我的模块中,我传递 jQ 而不是 jQuery。

这个问题指出了答案背后的原因:Error when passing undefined variable to function?

关于Javascript 模块,在可能未加载时传递 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16355043/

相关文章:

javascript - 输入中的 Chrome 现金值(value)

javascript - Footable doSort 根本不起作用

javascript - 破解 IE 8 后退按钮/强制重新发送?

jQuery:日期选择器开始在对话框中打开,仅在 IE 中

jquery ui 自动完成功能在 ie8 中不起作用(直到页面刷新)

javascript - html - javascript 无法以动态生成的 html 形式工作

javascript - 删除字符串的倒数第二个字符

javascript - 来自源 'file://' 的图像已被跨源资源共享策略 : 阻止加载

javascript - Python csv.reader() 到 JS?

javascript - 如何在 jQuery 点击函数中使用 jQuery 时间间隔?