首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以在加载jQuery之前预先注册处理程序?

是否可以在加载jQuery之前预先注册处理程序?
EN

Stack Overflow用户
提问于 2014-07-23 11:26:33
回答 4查看 1.1K关注 0票数 6

jQuery在页面上加载得很晚,而javascript依赖于jQuery是可用的,这种情况在jQuery之前加载是非常常见的情况,特别是如果您遵循将脚本更接近</body>的做法。

所以基本上我想从以下几个方面着手:

代码语言:javascript
运行
复制
<script>
  someFunctionThatUsesLateJQuery(){ [code that relies on jQuery] }
</script>

...

<script src="jquery.js"></script>
<script>
  $(function(){
    someFunctionThatUsesLateJQuery();
  });
</script>

像这样的事情:

代码语言:javascript
运行
复制
<script>
  _$.ready(function(){ [code that relies on jQuery] });
</script>

...

<script src="jquery.js"></script>

就像异步统计数据跟踪(ála Google )一样,有什么东西可以让您在加载jQuery之后注册javascript函数调用而不会出现可怕的$ is undefined错误呢?

,我的意思是在不需要注册和取消注册超时/间隔的情况下,实现。

是否有可能向jQuery添加某种预注册变量,一旦加载,它就会识别和处理这些变量吗?

用例:

值得注意的是,我得到的具体用例是一个附带的JS小部件,在这里,我希望在<script>放置的场景中进行一些DOM操作,因此在jQuery加载到</body>附近的情况下,在jQuery加载之前就有了出现的可能性。

然后,我不希望通过要求用户在代码执行的正确点(这将取决于它们的实现)注册一个特定的函数调用来进一步加重用户的负担.我想让它“工作”

EN

回答 4

Stack Overflow用户

发布于 2014-07-23 11:33:15

当所有函数调用转移到数据属性时,您可以尝试使用常用的解决方案。然后,在加载jQuery时,您将抛出具有这些属性的所有DOM元素,并运行此函数。也就是说,不是函数调用,而是添加data-type='load' data-function='YourNamespace.yourFunctionName',在window.load事件之后,您通过$('[data-type="load"]')选择所有元素,迭代它们,并执行函数调用。

UPD:猜测,异步函数队列模式可以用于阅读:异步设计模式的名称是什么,它在哪里使用?

票数 0
EN

Stack Overflow用户

发布于 2014-07-23 11:40:46

正如建议的这里是rich.okelly,您可以尝试这样做:

代码语言:javascript
运行
复制
(function() {
    var runMyCode = function($) {
        // jquery-dependent code here
        $("#foo").data('bar', true);
    };

    var timer = function() {
        if (window.jQuery && window.jQuery.ui) {
            runMyCode(window.jQuery);
        } else {
            window.setTimeout(timer, 100);
        }
    };
    timer();
})();

我还找到了一个更复杂的解决方案,但我个人更喜欢上面的解决方案而不是这个解决方案

不超时的更新:

代码语言:javascript
运行
复制
<script>
var runMyCode = function($) {
    // jquery-dependent code here
    $("#foo").data('bar', true);
};
</script>

...

<script src="jquery.js"></script>
<script>
    $(function(){
        runMyCode(window.jQuery);
    });
</script>
票数 0
EN

Stack Overflow用户

发布于 2014-07-24 10:44:57

如果注入jQuery脚本包含,则可以侦听onload事件。

代码语言:javascript
运行
复制
function loadJS(url, onloadCallback, elId){
//Inject script include into HEAD
    var scriptEl = document.createElement('script');
    scriptEl.type = 'text/javascript';
    scriptEl.src = url;
    if(elId)scriptEl.id = elId;
    document.getElementsByTagName('head')[0].appendChild(scriptEl);

    if(onloadCallback){
        scriptEl.onload = scriptEl.onreadystatechange = function(){
            if(!scriptEl.readyState || (scriptEl.readyState === 'complete' || scriptEl.readyState === 'loaded')){
                onloadCallback();
                scriptEl.onload = scriptEl.onreadystatechange = null;
            }
        }
    }
}

loadJS("http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js", function(){
    console.log( window.$ );
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24909230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档