我有以下代码:
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的第一行然后它将导致代码得到 没有我打电话就执行了。
答案 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中添加文档就绪处理程序。准备好多个文档处理程序都将被执行。