【问题标题】:Run jQuery code once jQuery loaded加载 jQuery 后运行 jQuery 代码
【发布时间】:2013-08-07 01:16:03
【问题描述】:

我在页面的结束标记之前加载了 jQuery。

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>

我的大部分js都是在这个下面加载的

    <script src="js/script.js" type="text/javascript"></script>

效果很好。 我需要在 head 标记中运行一些广告代码。 这通常工作正常但是我想添加一个响应异常。 例如

    var mob = 0;
    if(jQuery(window).width() < 727)  {
        mob = 1;
    }
    if(mob)  {console.log('run special mob related code');}
    else {console.log('run special desktop related code');}

因为我的代码在我收到错误 ReferenceError: jQuery is not defined。 有没有解决的办法? 除非在头部,否则广告代码不会运行,但我无法真正将 jquery 移动到头部,因为我在多个网站上都有这个,并且可能会影响其他插件的运行方式?

【问题讨论】:

  • 你不能使用jQuery var 或$ 除非你加载jQuery库。如果你不能加载它..那么不要在那里使用jQuery var..
  • 您不能在给定页面上包含它的脚本标记之前运行 jquery 代码。
  • 你有没有尝试将那段代码封装在DOM ready handler
  • 我认为此链接可能对您有所帮助。 stackoverflow.com/questions/3087206/…
  • 您不想运行的代码有多复杂?也许您可以为此使用纯 js(当然,您始终可以使用纯 js),出于同样的原因,尽管我在项目的其余部分中使用了 jQuery。

标签: javascript jquery


【解决方案1】:

为什么不直接使用这样的东西:

if (document.documentElement.clientWidth < 727) {
mob = 1;
}

【讨论】:

  • 是的,这就是我在感谢之后的样子。我想用普通的js来做,但找不到关于docuemnt.width的任何东西。谢谢!
  • 编辑了我的评论:不客气,@ak85。另外,值得深思的是:如果非移动用户在调整为低于 727 的浏览器窗口中打开页面,然后将其扩展为全宽会怎样?
  • 我不确定这是否是一个主要问题,因为我认为它不会影响到许多用户,但这是一个好点,如果我使用 jQuery,我会查看 .resize(),你知道js中的等价物吗?
  • 在许多情况下,恢复为纯 JavaScript 更简单。看看这本详尽但易于阅读的书:amazon.com/Professional-JavaScript-Developers-Nicholas-Zakas/dp/…
【解决方案2】:

在您的代码的早期,您可以在 window 对象上定义一个 jQuery 属性,当实际的 jQuery 对象重新分配它时,它将运行需要 jQuery 的代码。

(function(){
  var _jQuery;
  Object.defineProperty(window, 'jQuery', {
    get: function() { return _jQuery; },
    set: function($) {
      _jQuery = $;

      // put code or call to function that uses jQuery here

    }
  });
})();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多