即使在脚本之前加载jQuery,Firebug也会给jQuery“$ is undefined”错误

时间:2013-01-23 19:16:36

标签: javascript jquery

好的,所以我有一个WordPress网站。它使用了相当多的jQuery脚本,jQuery被加载到页面的头文件中。我有一小段代码,应该简单地为图像链接添加一个类。我已经将它放在文档的底部,就在</body>标记之前。

<script type="text/javascript">
$.noConflict();
$(document).ready(function () {
$('a[href*=".png"], a[href*=".gif"], a[href*=".jpg"]').addClass('zoom');
});
</script>

脚本不起作用,Firebug给了我$ is undefined错误。我检查了各种类似的其他问题,答案似乎没有帮助。

源页面位于:http://sergedenimes.com/2013/01/bruno-bisang-30-years-of-polaroids/

我确定这是另一个导致冲突的插件,但我会很感激如何解决这个问题。

编辑:哇谢谢你的快速反应。似乎它是一个早期的插件呈现$未定义。用jQuery替换已经解决了。

2 个答案:

答案 0 :(得分:6)

您之前已在代码中jQuery.noConflict();执行了$未定义。

查看源代码的第79行。

答案 1 :(得分:3)

$.noConflict();使$符号在加载jQuery之前返回到之前的定义。如果没有其他库使用该符号,则返回undefined。这就是它的目的。

如果您打算使用它而不是将任何其他符号定义为jQuery的快捷方式,则必须使用jQuery作为jQuery函数的符号,而不是$

请改为:

<script type="text/javascript">
$.noConflict();
jQuery(document).ready(function () {
    jQuery('a[href*=".png"], a[href*=".gif"], a[href*=".jpg"]').addClass('zoom');
});
</script>

或者,如果您只是尝试在$处理程序中使用.ready(),那么您可以使用.ready()这样的功能分配它:

<script type="text/javascript">
$.noConflict();
jQuery(document).ready(function ($) {
    $('a[href*=".png"], a[href*=".gif"], a[href*=".jpg"]').addClass('zoom');
});
</script>

或者如果您的代码不只是.ready()处理程序中想要使用$的代码,您可以在一个允许其他库使用{{1}的闭包中重新定义$在他们自己的代码中,但您可以在闭包内的jQuery代码中将它用于jQuery:

$

或者,您可以为jQuery定义一个新的快捷符号:

<script type="text/javascript">
$.noConflict();
(function($) {
    $(document).ready(function () {
        $('a[href*=".png"], a[href*=".gif"], a[href*=".jpg"]').addClass('zoom');
    });
    $.each(whatever...)
})(jQuery);
</script>