我的$ .extend在javascript中的函数内部似乎不起作用

时间:2012-11-11 11:12:43

标签: javascript jquery

我有以下代码:

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的第一行然后它将导致代码得到 没有我打电话就执行了。

2 个答案:

答案 0 :(得分:2)

您已将代码从ready事件中的运行更改为立即运行。在加载文件2之后,您似乎正在加载您的datatable插件,因此当您尝试使用它时插件仍然不存在。

如果你把它放回ready事件中,它应该有效:

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

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

});

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

答案 1 :(得分:0)

  

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

如果你实际上只更改了 第一行,那么你就创建了语法错误 - 你添加了一个开头(而没有结束)。但只是添加结束)不会导致现在的匿名函数表达式被执行。如果您希望在不从文件1调用的情况下执行代码,则需要在末尾添加额外的括号()以实际调用该函数。

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

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

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

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