如何在加载jQuery之前将回调排入队列?

时间:2012-06-19 02:05:26

标签: javascript jquery

我在应用中切换到使用Require.JS并立即遇到了这个问题:

我曾经使用内联JS在加载DOM的某些部分时启动某些调用。现在显然jQuery只在执行这些调用后加载,因此导致错误,因为jQuery($)未定义。

在加载jQuery之前将jQuery的回调排入队列的最佳方法是什么?如果jQuery已经加载,我需要立即触发它们,或者一旦加载就立即触发它。

2 个答案:

答案 0 :(得分:2)

这就是我的工作

var _DomReadyCallback = _DomReadyCallback || [];

_DomReadyCallback.push(function() {
    alert('Jquery Loaded');
});

加载jQuery后循环遍历数组并调用所有回调

// This code should come after jQuery is loaded (add it on the jQuery onload callback or append it at the end of the jQuery file)
$(function(){
    for (var cb in _DomReadyCallback) {
        cb.call();
    }
});

OR

requirejs(['jquery'], function   ($) {
    for (var cb in _DomReadyCallback) {
        cb.call();
    }
});

答案 1 :(得分:1)

您选择了两种互不兼容的脚本技术:

  1. 延迟加载jQuery
  2. 在加载DOM时内联调用jQuery
  3. 你根本不能同时做这两件事。如果你真的需要以延迟的方式加载jQuery,那么你将不得不推迟使用jQuery直到加载jQuery。 Requires.js有一个可选的回调函数,可以在加载jQuery时通知你。此时,您可以运行其他初始化jQuery代码。

    如果你想尽可能多地保留这两者,你可以让每一行内联JS在一个回调数组中注册一个回调,然后创建一个函数,在jQuery加载时执行所有这些回调。如果你想要完成的事情值得这么麻烦,我会有点惊讶。

    我建议如果你想让内联javascript尽快执行,那么要么让它独立于jQuery(这样它可以随时运行)或者停止推迟jQuery的加载,以便它可以用作你的DOM负荷。