Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 延迟函数直到jQuery加载(或另一个固定点)_Javascript_Jquery - Fatal编程技术网

Javascript 延迟函数直到jQuery加载(或另一个固定点)

Javascript 延迟函数直到jQuery加载(或另一个固定点),javascript,jquery,Javascript,Jquery,问题:使用以下方法将运行的代码延迟到jQuery加载之后(或者直到另一个固定点)是否有任何错误 奖励问题:有更好的方法吗?(例如,不必命名window.deferred中的函数,如window.deferred.afunction) 在我的页面中(jQuery之前): 演示: 据我所知,它很好用。但我认为自己是JavaScript的业余爱好者——我可以写它,但并不总是理解它是如何工作的。 到目前为止,我发现的所有方法(例如)都依赖于setTimeout或setInterval并调用check函数

问题:使用以下方法将运行的代码延迟到jQuery加载之后(或者直到另一个固定点)是否有任何错误

奖励问题:有更好的方法吗?(例如,不必命名window.deferred中的函数,如window.deferred.afunction)

在我的页面中(jQuery之前):

演示:

据我所知,它很好用。但我认为自己是JavaScript的业余爱好者——我可以写它,但并不总是理解它是如何工作的。 到目前为止,我发现的所有方法(例如)都依赖于setTimeout或setInterval并调用check函数,这对我来说很不雅观

还有Require.js,我相信可以使用它,但我认为要实现我想要的东西太过分了,因为它主要用于不同的目的

背景

我正在用Markdown为我的博客写一篇文章,我在页面内写了一点JavaScript来管理一些隐藏的内容。我想在我的脚本中使用jQuery,但是jQuery是在页脚中加载的——因此,我想要一种优雅的方式,将内联脚本的执行推迟到jQuery加载之后

我的页脚中有jQuery和一个general.js脚本,其余大部分JavaScript都在其中运行。我想在每篇博客文章中运行“在我的页面”部分,并将“在我的JS中”部分保留在general.JS中,这样我就再也不用担心了

我知道我可以定义但不能执行函数,但我不想每次都更新general.js(例如添加function1()、function2()等)


我希望它能自动循环所有延迟函数。

实现所需功能的更简单方法是使用


addEventListener('DOMContentLoaded',function(){
$(文档).ready(函数(){
log('包括jquery在内的我的其他脚本现在已经加载');
});
});

但是我会停下来思考为什么更喜欢内联脚本而不是general.js,因为内联脚本会对性能产生负面影响,并阻止缓存。如果您追求的是代码分离,那么您可以实现它,具体取决于您的设置。

我真的不认为这样做有什么错。但是,我将使用数组而不是对象:

/*运行延迟函数*/
if(window.deferred&&Array.isArray(window.deferred)){
window.deferred.forEach(函数(fn){
如果(fn的类型==‘函数’){
fn();
}
});
}
。你好,世界{
颜色:#f00;
字号:3em;
字体系列:verdana;
}
.jq{
颜色:#00f;
}

window.deferred=window.deferred | |[];
window.deferred.push(函数affunction(){
log(“函数正在运行”);
});
window.deferred.push(函数另一个函数(){
log(“另一个函数正在运行”);
});
window.deferred.push(函数doSomethingWithJquery(){
jQuery('Hello from jQuery!');appendTo('body');
});

这要整洁得多,如果我使用数组,我可以避免命名函数,这样我就不会意外地覆盖它们:
window.deferred.push(function(){
目前,这是我在博客上使用的唯一代码实例(仅此页)因此,我认为内联脚本比将其添加到我的general.js(在每个页面上运行)要好。当你说阻止缓存时,你的意思是内联脚本不会在多个页面上缓存(如果它是一个外部脚本的话)?你不是说它会阻止缓存它正在运行的页面吗?DOMContentLoaded是否会等待外部脚本加载?这会更整洁,但我想在某些情况下,我的代码可能仍然有用。
<script>
window.deferred = window.deferred || {};
window.deferred.afunction = function() {
  console.log('afunction is running');
};

window.deferred.anotherfunction = function() {
  console.log('anotherfunction is running');
};
</script>
/* Run deferred functions */
if(window.deferred && typeof window.deferred === 'object') {
  for (var fn in window.deferred) {
    if (typeof window.deferred[fn] == 'function') {
        window.deferred[fn]();
    }
  }
}
<script>
  window.addEventListener('DOMContentLoaded', function() {
    $( document ).ready(function() {
      console.log('my other scripts including jquery has loaded now');
    });
  });
</script>