【问题标题】:Why is $(document).ready not firing for me?为什么 $(document).ready 不为我开火?
【发布时间】:2010-12-23 20:17:55
【问题描述】:

在一个 php 文件中,我使用 include 包含以下 js.php 文件 在此之前我已经包含了 jquery 文件。

<script type="text/javascript">

$(document).ready(function(){
     alert("hello");
});
</script>

但它不起作用。为什么?当我跳过 $(document).ready 函数时,它可以工作。

但我需要里面的 jquery 代码。怎么了?

【问题讨论】:

  • 您也可以发布您的 PHP 代码吗?
  • 发布您收到的错误。如果您使用的是 firefox,则可以通过“工具 > 错误控制台”访问错误控制台
  • 你在使用其他的 javascript 框架吗?您的 jquery 文件的路径是否正确?

标签: php javascript jquery


【解决方案1】:

根据您所说的,最可能的答案是核心 jQuery 文件实际上并未正确包含在页面中。 你需要这样的东西:

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

很可能,这是丢失或输入错误。

【讨论】:

  • 我已经多次看到同样的问题——而且几乎总是 jQuery
  • 使用 Google 加载器可以帮助避免这些类型的拼写错误,以及自动拉下 jQuery 的更新版本(如果需要):
【解决方案2】:

另一个静默失败的原因,并且所有剩余的回调从未被调用:

$(document).ready(null);

因此,请检查您是否有返回 null 的变量或语法错误。喜欢这个:

$(document).ready(function($){}(jQuery));

请注意,上面的函数被立即调用并返回 undefined。

【讨论】:

  • 例如我,我在$().each循环回调中使用了之前未定义的变量作为选择器输入。
【解决方案3】:
  1. 检查jQuery是否加载正确。
  2. 查看浏览器的进度条:它可能正在加载一些计数器并且文档在加载之前还没有准备好:这通常发生在外部资源缓慢时。
  3. 试试$(function(){ alert(...); });以防万一...
  4. 在此 onload 绑定之前检查您是否有 JS 错误。使用 Firefox 的 FireBug 插件进行检查。

【讨论】:

  • firebug 说 $(document).ready(function(){ 没有定义...我的 jquery 文件有问题吗?
  • 您在使用 Mootools 吗?...如果是,请确保您已设置 Jquery 以实现兼容性
  • 如果它说 $(document).... 不是一个函数,这意味着 1) 另一个库正在捕获 $,或者 jQuery 没有正确加载。
【解决方案4】:

还要看看你是如何定义 jquery 包含标签的。似乎出于某种原因,您需要使用两个单独的标签打开和关闭标签。使用一个标签关闭它似乎不起作用:

作品:

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

不起作用:

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

【讨论】:

    【解决方案5】:

    我也遇到了类似的问题,这就是我所做的。

    确保 document.ready 放置在 在您的 javascript 文件中定义的回调函数之后。

    这里,在解析 document.ready 时还没有定义 init。

    //won't work
    $(document).ready(init);
    var init = function() {
       console.log('init not called');
    }
    

    正确方法:

    //Works
    var init = function() {
       console.log('document is ready');
    }
    $(document).ready(init);
    

    注意 $(document).ready(init) 放在最后。

    【讨论】:

      【解决方案6】:

      是的,我注意到有时会出现问题,我为此编写了安全的解决方案,从而解决了这个问题。

      // jquery plugin 'jquery.ready.fix.js'
      // @author Szymon Działowski
      ;(function ($) {
          $.fn.ready.old || $(function (r) {
              r = $.fn.ready;
              $.fn.ready = function (fn) {    $.isReady ? fn() : r(fn);    };
              $.fn.ready.old = r;
          });
      })(jQuery);
      

      之后就可以运行代码了:

      $(function () {alert('go')})
      

      它总是发出警报。

      PS:这是一种叫做“打鸭”的技术更多关于:http://www.paulirish.com/2010/duck-punching-with-jquery/

      【讨论】:

        【解决方案7】:

        在 Zakas 的 The art of throwing JavaScript errors 之后,我开始在 JavaScript 中抛出自己的错误,作为查找 JS 问题的一种方法。

        但不幸的是,这种方法开始导致 jQuery ready() 函数静默失败,对于站点的不相关部分。 :(

        我了解到以下是不同的:

        throw new Error()
        

        不同于

        console.error()
        

        所以,我开始使用console.error(),结果控制台还是红色高亮。

        【讨论】:

          【解决方案8】:

          检查的另一点:您的程序中可能存在 PHP 错误。 PHP 致命错误退出脚本,$(document).ready 将永远不会被执行。

          根据您的服务器设置或 CSS,您可能看不到 致命错误 消息。

          【讨论】:

            【解决方案9】:

            在我的例子中,document.ready 没有被调用,因为 Ajax 请求向服务器发送了一个 html 表单,并且只有部分文档被接收 - 并且在 ajax 请求之后没有调用 document ready。 p>

            因此,在重新加载的那部分上的某些按钮不再绑定到事件 .click() atc.. 因为这些按钮是新的,并且这些事件的绑定仅在文档准备期间被调用 - 不适用于 AJAX .

            【讨论】:

              【解决方案10】:

              刚刚出现这个问题,结果发现是脚本标签中的拼写错误:

              &lt;script type="text/javscript"&gt;

              请注意 javascript 中缺少的“a”。改为简单:

              &lt;script&gt;

              解决了问题。

              【讨论】:

                【解决方案11】:

                如果上面没有任何效果,另一个肮脏的技巧是在没有任何时间的情况下将您的函数包装到 SetTimeOut 函数中,这只是在当前调用堆栈完成执行后将代码排队运行

                     setTimeout(function(){
                        FillOpenTranscriptionTasks();
                    });
                

                【讨论】:

                  【解决方案12】:

                  而不是 $(document).ready(function() { ... });

                  试试

                  $(文档).ready(abc());

                  函数 abc() { …… }

                  为我工作。我自己搜索了很多地方,但找不到解决方案。随机尝试并成功!

                  【讨论】:

                  • 除非您的 abc 函数返回一个函数,否则此代码不会按照您的想法执行。 abc 将执行并将返回值发送到 $(document).ready()。如果返回值为 null,您可能会像我在回答中解释的那样给其他人带来问题。你不妨只做 abc();或 (function() {...})();
                  【解决方案13】:

                  我遇到了这样的问题,只是将&lt;script type="text/javascript"&gt; 更改为&lt;script type="javascript"&gt;,所有问题都消失了!

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-07-26
                    • 2023-03-23
                    • 2013-10-17
                    • 2015-12-10
                    • 2014-04-20
                    相关资源
                    最近更新 更多