为什么$(文件)。我没有为我开火?

时间:2009-12-06 23:54:12

标签: php javascript jquery

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

<script type="text/javascript">

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

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

但我需要内部的jquery代码。怎么了?

13 个答案:

答案 0 :(得分:32)

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

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

可能会丢失或输入错误。

答案 1 :(得分:25)

另一个无声失败的原因,并且所有剩余的回调都没有被调用:

$(document).ready(null);

因此,请检查是否有返回null的变量或语法错误。像这样:

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

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

答案 2 :(得分:4)

  1. 检查jQuery是否正确加载。
  2. 查看浏览器的进度条:它可能正在加载一些计数器,并且文档在加载之前还没有准备就绪:这通常在外部资源很慢时发生。
  3. 请尝试$(function(){ alert(...); });以防万一...
  4. 在此onload绑定之前检查是否有JS错误。使用Firefox的FireBug插件进行检查。

答案 3 :(得分:3)

另请参阅如何定义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"/>

答案 4 :(得分:1)

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

确保 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)放在最后。

答案 5 :(得分:1)

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

// 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:这是一种叫做'#46; duck punching&#34;更多关于:http://www.paulirish.com/2010/duck-punching-with-jquery/

答案 6 :(得分:1)

遵循Zakas&#39; The art of throwing JavaScript errors,我开始在JavaScript中抛出自己的错误,作为查找JS问题的方法。

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

我了解到以下情况有所不同:

throw new Error()

不同
console.error()

所以,我开始使用console.error(),我仍然在控制台中显示红色突出显示。

答案 7 :(得分:1)

要检查的另一点:也许你的程序中有PHP错误。 $(document).ready永远不会被执行。

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

答案 8 :(得分:0)

在我的情况下, document.ready没有被调用,因为一个html表单是通过Ajax请求发送到服务器的,只有部分文档被收回 - 并且在ajax请求之后没有调用文档就绪。

因此,重新加载该部分的某些按钮没有绑定到事件.click()atc ..因为这些按钮是新的,并且这些事件的绑定仅在文档就绪时首次调用 - 而不是用于AJAX

答案 9 :(得分:0)

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

<script type="text/javscript">

请注意缺少的&#39; a&#39;在javascript中。改为简单:

<script>

解决了问题。

答案 10 :(得分:0)

如果以上都不起作用,另一个肮脏的技巧是将您的函数包装到 SetTimeOut 函数中,而无需任何时间,这只会在当前调用堆栈执行完毕后将代码排队运行

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

答案 11 :(得分:-3)

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

尝试

$(document).ready(abc());

function abc(){  .... }

为我工作。我自己搜索了许多地方,但找不到解决方案。随机尝试了这个并且工作!!

答案 12 :(得分:-4)

我遇到了这样的问题,只需将<script type="text/javascript">更改为<script type="javascript">,所有问题都已消失!