0

我有以下代码:

File 1:
$(document).ready(function () {
   addDataTableExts();
}

File 2:
function addDataTableExts() {
   $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
   }
}

这似乎工作正常。我现在尝试用以下内容替换它:

File 2:
(function () {

    $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
    }
}

这行不通。

如果我以第一种方式执行此操作,是否有某些原因似乎才有效?我认为通过更改文件 2 的第一行,它会导致代码在没有我调用的情况下被执行。

4

2 回答 2

2

您将代码从在ready事件中运行更改为立即运行。您似乎在加载文件 2 后加载了数据表插件,因此当您尝试使用它时该插件还不存在。

如果你把它放回ready事件中,它应该可以工作:

File 2:
$(document).ready(function () {

  $.extend($.fn.dataTableExt.oStdClasses, {
    sWrapper: 'no-margin last-child'
  }

});

注意:jQuery 中的事件不是独占的,因此您可以ready在同一个页面中拥有多个事件处理程序而不会出现问题。

于 2012-11-11T11:17:57.417 回答
0

“我认为通过更改文件 2 的第一行,它会导致代码在没有我调用的情况下被执行。”

如果您实际上更改了如图所示的第一行,那么您已经创建了一个语法错误 - 您添加了一个 opening(而没有 close )。但简单地添加关闭)不会导致现在匿名函数表达式被执行。如果您希望在不从文件 1 调用的情况下执行代码,则需要()在末尾添加额外的括号以实际调用该函数。

此外,您在结束)后缺少关闭,尽管这也是您的代码的第一个版本中的一个问题(也是文件 1 中的文档就绪处理程序的问题)。}$.extend(...

(function () {
    $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
    });    // <-- add missing ); here
})();      // <-- add missing )(); here

但是您根本不需要包含函数,除非它还包装了您未显示的其他代码,因为其上的 $.extend() 语句对全局范围没有任何有害影响。

最后,如果您确实需要$.extend()在页面准备好后运行它,但又不想在两个文件之间存在依赖关系,您可以直接在文件 2 中添加一个文档就绪处理程序。多个文档就绪处理程序都将被执行。

于 2012-11-11T11:29:36.940 回答