TypeError:$(...)在firebug中为null错误,但代码适用于jsFiddle

时间:2013-01-07 19:59:41

标签: jquery typeerror blackboard

你可以在http://jsfiddle.net/twsx7/9/

看到我的js(以及相关的html和css)

我正在进行调整以使用Blackboard Learn 9.1(因此,如果有人体验过学习管理系统,或者使用调整构建块,他们可能已经知道为什么我会遇到这个问题)。< / p>

我正在进行的更改包括检查应用的课程主题,然后根据该课程向表中添加一个类,以便将表格设置为与主题相匹配。

当我在我们的服务器上运行时,当它到达 var theme_id = $(“。current”)时,我得到错误 $(...)为空。attr(“id “); 即可。 JS的其余部分工作(请注意,JS的顶部通常是页面上包含的另一个文件,无法将其链接到jsfiddle,因为它在经过身份验证的服务器上)

我对此文件的贡献是(以及代码失败的地方):

第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版本。

当您选择包含调整时,我在代码中找到以下内容:

<script src='/webapps/qut-tweakbb-BBLEARN/jquery.js' type='text/javascript'></script><script src='/webapps/qut-tweakbb-BBLEARN/jquery.tweakSetup.js' type='text/javascript'></script>

jsFiddle顶部的代码来自 jquery.tweakSetup.js

我希望我刚刚使用错误的标记来获取jQuery的版本(虽然我无法找到原始代码所用的版本),任何建议都会非常感激

3 个答案:

答案 0 :(得分:6)

  1. 确保在运行自定义脚本之前加载了jQuery
  2. 您是否从JSFiddle复制代码然后立即使用它?小提琴代码有腐败的习惯。 ;通常被定义为无效字符。将其删除并自行重新输入。
  3. <强> ADDED : 正如John Fontaine指出的那样,jQuery可能与另一个库发生冲突。要绕过这个,你可以使用jQuery noConflict模式。 documentation对此非常清楚,但我会举一些例子,以防万一。

    最好的方法如下,或者至少是我的偏好:

    使用其他变量而不是$,例如$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 ($) {开头并以});结尾的块。

答案 1 :(得分:1)

Blackboard Learn在大多数网页上使用prototypejs http://www.prototypejs.org/库。如果你想使用JQuery脚本和插件,你必须使用无冲突模式,并调用你的$(&#39;&#39;)样式调用作为JQuery(&#39;&#39;)调用。请参阅http://docs.jquery.com/Using_jQuery_with_Other_Libraries

上的JQuery文档

答案 2 :(得分:0)

我使用 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 $ ,或者您可以使用 jQuery.noConflict()

来创建更多内容