【问题标题】:Load jQuery after DOM, how can I make $.ready() available to my page before jQuery is loaded?在 DOM 之后加载 jQuery,如何在加载 jQuery 之前使 $.ready() 可用于我的页面?
【发布时间】:2012-12-05 17:07:07
【问题描述】:

我想延迟加载 jQuery,但我有少量的内联 javascript 在 $.ready() 上运行。由于未加载 jQuery,因此这些行会引发错误并且永远不会运行。有没有办法让 $.ready() 成为一个可用的函数,但等待执行直到 jQuery 被加载?

谢谢!

【问题讨论】:

标签: jquery


【解决方案1】:

解决此问题的通用方法的一个选项是将您的内联 javascript 放入一个函数中,并将该函数添加到一个全局可访问的数组中 - 暂时不要调用它。当document.ready 可用时,这些本质上是您要为document.ready() 安排的功能。

然后,当您加载 jQuery 时,您设置了一个 document.ready() 处理程序,该处理程序循环遍历该数组中的所有函数并调用它们。

// declare global at the top of your web page
var readyFns = [];

// in your inline code, add a function to the readyFns array
readyFns.push(myInlineFn);

// when your jQuery code loads, do this:
$(document).ready(function() {
    for (var i = 0; i < readyFns.length; i++) {
        readyFns[i]();
    }
});

如果你想使用匿名函数,你可以像这样做中间步骤:

// in your inline code, add a function to the readyFns array
readyFns.push(function() {
   // put your code here
});

【讨论】:

  • 我喜欢这个,我认为它会起作用。但是有没有办法用像 jquery 这样的匿名函数来做到这一点? readyFns.push(function() { });也许?
  • @Beachhouse - 我在答案中添加了匿名函数。
【解决方案2】:

除了使用.ready,您还可以使用非jQuery 等效项,例如window.onload,但这些往往与.ready 不兼容,所以我不确定它们是否能满足您的需求。

显然有人提取了 jQuery 的 ready 函数,因此可以单独使用:http://code.google.com/p/domready/

【讨论】:

  • +1 domready 可能是我正在寻找的,但代码看起来有一些开销来执行此操作。
【解决方案3】:

你应该:

  1. 将 ready 替换为函数调用,例如example();
  2. 创建一个函数,例如example() { }
  3. 将该函数放入(document).ready()

【讨论】:

  • 非常简单的答案,但我需要检查它是如何工作的。我有多个在 DOM 之前加载的就绪块,我认为这会限制我使用一种。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
相关资源
最近更新 更多