2

您可以在以下位置查看我的 js(以及相关的 html 和 css):http: //jsfiddle.net/twsx7/9/

我正在对 Blackboard Learn 9.1 进行调整(因此,如果有人使用过学习管理系统或调整构建块,他们可能已经对我遇到此问题的原因有所了解)。

我所做的更改涉及检查应用了哪些课程主题,然后基于该主题将类添加到表中,以便表的样式与主题相匹配。

当我在我们的服务器上运行它时,我得到错误$(...) is null 当它到达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 的版本使用了错误的标记(尽管我无法找到原始代码编写的版本)任何建议将不胜感激。

4

3 回答 3

6
  1. 在运行自定义脚本之前确保已加载 jQuery
  2. 您是否从 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 ($) {和以 . 结尾的块});

于 2013-01-07T20:09:34.600 回答
1

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

于 2013-01-08T03:53:19.167 回答
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 where $或者您可以使用jQuery.noConflict()创建更多

于 2017-07-27T06:40:05.227 回答