【发布时间】:2011-01-06 19:25:57
【问题描述】:
我正在尝试显示一个使用 jQuery 的页面。页面中实现的 AJAX 功能不起作用。
我正在使用 FF 进行调试。当我查看控制台面板时,我看到以下错误:'jQuery 未定义'。啊,我认为这很简单——可能没有正确包含 jQuery 文件,或者没有找到等。所以我查看了 HTML 并单击了节点——你瞧,jQuery 脚本已经正确包含在页面中。
虽然引用 jQuery 的页面中的其他 js 库都没有使用“$”(如原型),但我在 jQuery 逻辑中调用了 noConflict() 方法,以防我以后使用冲突库阶段。
[编辑]
我认为问题与我在模板环境中使用 jQuery 的文件有关(准确地说是 Symfony 1.4)。对于那些不熟悉 Symfony 模板系统的人来说,本质上,视图模型由一个“布局”文件(模板)组成,然后被装饰(装饰器模式)以及其他信息位(我们称之为“页面内容” )。
最后一页大概是这样的:
<html>
<head>
<script type="text/javascript" src= "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" ></script>
</head>
<body>
<!-- page contents go here -->
</body>
</html>
我正在将 jQuery 加载到模板中(即 Symfony 术语中的“布局”)。
这样做的原因是 JQ 库是在客户端缓存的,并且可用于需要它的页面。动态页面(其内容进入布局的“页面内容”部分)将拥有自己的 jQuery 逻辑。这(使用下面 Mark Schultheiss 的答案中提供的“包装函数”想法),如下所示:
<script type="text/javascript">
/*<![CDATA[*/
jQuery(function()
{
jQuery.noConflict();
jQuery(document).ready(function(){
jQuery("div.tpaccordion div.accItem").hide();
jQuery("#latestVideosHolder").show();
jQuery("div.tpaccordion h3").click(function(){
jQuery(this).next().slideToggle("slow")
.siblings("div.accItem:visible").slideUp("slow");
jQuery(this).toggleClass("active");
jQuery(this).siblings("h3").removeClass("active");
});
});
});
/*]]>*/
</script>
**[Edit2]**更正了语法错误。现在我回到了 jQuery is not defined 错误。 :(
【问题讨论】:
-
看起来你复制了 Mark Schultheiss 给出的代码中的语法错误——更改最后一个 )};进入 });
-
由于您使用的是 Firefox,因此可能值得使用 HttpFox 插件检查加载顺序。至少,当我过去遇到类似问题时,这对我有所帮助。除此之外,我们可能需要查看更多代码。
-
刚刚下载了 HttpFox - 发现它与 FF 3.5.7 不兼容 :( 有趣的是因为它声称可以与 (Firefox: 1.5 – 3.5.*) 一起使用