TypeError:$(…)在firebug中为空错误,但代码适用于jsFiddle
你可以在http://jsfiddle.net/twsx7/9/看到我的js(及相关的html和css)
我正在进行调整以使用Blackboard Learn 9.1(因此,如果有人体验过学习管理系统,或者使用调整构建块,他们可能已经知道为什么我会遇到这个问题)。
我正在进行的更改包括检查应用的课程主题,然后根据该类添加一个类,以便对表进行样式设置以匹配主题。
当我在我们的服务器上运行时,我得到错误$(…)在到达var theme_id = $(“。current”)时为空 .at(“id”); 。 JS的其余部分工作(请注意,JS的顶部通常是包含在页面上的另一个文件,无法将其链接到jsfiddle,因为它在经过身份validation的服务器上)
我对这个文件的贡献是(以及代码失败的地方):
第242行
$unitMap.addClass(getTheme());
381 – 385行
function getTheme() { var theme_id = $(".current").attr("id"); // error occurs this line var theme = $("#"+theme_id).find("a").html(); return theme.toUpperCase(); }
这是我第一次尝试使用jQuery,因此我担心的是我使用了错误的语法来编写代码所使用的jQuery版本。
当您选择包含调整时,我在代码中找到以下内容:
jsFiddle顶部的代码来自jquery.tweakSetup.js
我希望我刚刚使用错误的标记为jQuery的版本(虽然我不能找到原始代码的编写版本)任何建议将不胜感激。
- 在运行自定义脚本之前,请确保已加载jQuery
- 您是否从JSFiddle复制代码然后立即使用它? 小提琴代码有腐败的习惯。 的
;
通常被定义为无效字符。 将其删除并自行重新输入。
增加 :3。正如John Fontaine指出的那样,jQuery可能与另一个库发生冲突。 要绕过这个,你可以使用jQuery noConflict模式。 文档对此非常清楚,但我会举一些例子,以防万一。
最好的方法如下,或者至少是我的偏好:
使用另一个变量而不是$
,例如$j
。 通过这样做,您和您的代码的任何其他管理员都清楚,此代码依赖于另一个库而不是$
。
示例 :
var $j = jQuery.noConflict(); // Use jQuery via $j(...) $j(document).ready(function () { var secondary = $j("#secondary-footer"); secondary.hide().addClass("fixed").fadeIn("fast"); $j(window).scroll(function () { if (secondary.offset().top >= ($j(document).height() - 350)) { secondary.removeClass("fixed"); } else if (secondary + ":not('.fixed')") { secondary.addClass("fixed"); } }); });
这种方法的“危险性”是你有时可能会忘记使用这个变量。 你可以做的是使用正常的美元符号开始,当你完成后,做一个替换的发现。
可能是最直接的方法:
jQuery(function ($) { var secondary = $("#secondary-footer"); secondary.hide().addClass("fixed").fadeIn("fast"); $(window).scroll(function () { if (secondary.offset().top >= ($(document).height() - 350)) { secondary.removeClass("fixed"); } else if (secondary + ":not('.fixed')") { secondary.addClass("fixed"); } }); });
这允许您在该块中使用jQuery,即以jQuery(function ($) {
并以});
结尾jQuery(function ($) {
开头的块});
。
Blackboard Learn在大多数页面上使用prototypejs http://www.prototypejs.org/ library。 如果要使用JQuery脚本和插件,则必须使用无冲突模式,并调用$(”)样式调用作为JQuery(”)调用。 请参阅http://docs.jquery.com/Using_jQuery_with_Other_Libraries上的 JQuery文档
我使用jQuery.noConflict()在同一页面上运行了几个脚本;
var $j = jQuery.noConflict(); function getTheme() { var theme_id = $j(".current").attr("id"); // error occurs this line var theme = $j("#"+theme_id).find("a").html(); return theme.toUpperCase(); }
只需使用$ j where $或者你可以使用jQuery.noConflict()创建更多