我正在使用DataTables来显示一些数据。当添加新记录(通过AJAX)时,我试图在成功时重新加载表。每当我尝试调用oTable.fnDraw()或oTable.fnReloadAjax()时,我都会收到错误“oTable is not defined”。我做错了什么?
我已经尝试了fnDraw()和fnReloadAjax(),并且都返回了相同的错误。
$(document).ready(function(){
var oTable = $('.admin_users').dataTable({
"bProcessing": true,
"sAjaxSource": 'sql/admin_users.php',
"aaSorting": [[ 0, "asc" ]],
"bJQueryUI": true,
"sPaginationType": "full_numbers",
// "sAjaxSource": 'SQL/dataTable.php',
"bStateSave": true, //Use a cookie to save current display of items
"aoColumns": [
null,
null,
null,
null,
{ "sType": "date", "sClass":"center" }
],
"bScrollCollapse": true,
"sScrollX": "100%"
});
oTable.fnAdjustColumnSizing();
手动重绘按钮:
$('#click_me').click( function () {
oTable.fnDraw();
//oTables.fnReloadAjax();
});
答案 0 :(得分:4)
oTable
是对数据表的局部变量引用,它在文档就绪函数之外无效。
请改为:
$('#click_me').click( function () {
$('.admin_users').dataTable().fnReloadAjax();
} );
答案 1 :(得分:2)
` 这段代码对我有用......
$(document).ready(function(){
var oTable = $('#MyTab').dataTable({....});
$('#btnRefresh').click( function () {
oTable.fnDraw();
} );
}`
答案 2 :(得分:1)
范围问题总是很棘手。我并不是自称是专家,但这种方式对我来说似乎相当一致:
使用对象创建命名空间的示例:
var myApp = myApp || {}; // create it if the variable isn't already being used
myApp.oTable = $('#admin_users').dataTable({ parameters });
myApp.someUtilityFunction = function(foo) { alert(foo) };
顺便说一句,你可以看到我在上面的例子中为我的dataTable使用了一个ID。选择器是一个选择器,所以你的选择器会工作,但无论如何它总是一个唯一的表,所以ID选择器更有效率。我也不是100%确定dataTable()是否仅在选择器返回的第一个节点上运行(我希望如此!),这是一个潜在的问题。
有了这些,您可以毫不畏惧地将文档中的点击绑定起来:
$(function() {
$('#click_me').click( function () {
myApp.oTable.fnReloadAjax(); // if script is available
});
});
另外一点,如果#click_me有被破坏的危险(例如,在正在重绘的表中!)你最好使用.delegate()(jQuery 1.6.x)或.on ()(1.7及以上)
答案 3 :(得分:0)
oTable是对数据表的局部变量引用,它在文档就绪函数之外无效。
是的,你可以。
var oTable;
$(document).ready(function() {
oTable = $('.admin_users').dataTable({
});
});
$('[name=insert]').live('click', function(){
$DT.RowInsert(this);
oTable.fnReloadAjax();
return false;
});
答案 4 :(得分:0)
您可以使用数据表的ajax.reload方法重新加载数据表,请尝试这些。
$('#click_me').click( function () {
oTable.ajax.reload();
});
答案 5 :(得分:-1)
如果您只想重新加载数据以获取最新记录,只需在关键字段上调用点击事件
- $("#tableToCallEvent").find('.sorting').eq(0).click();
你可以改变eq(0)的值,其中0是表格中第一列的索引
简单易行:)