我有一个在函数调用中创建的数据表。但是如果我想基于event listeners like this创建新行,则会给出一个错误,即表变量未定义,这是可以理解的,因为它在函数调用内而不是全局变量。那么如何为此创建变通方法并在$(document).ready()
部分下添加事件侦听器?
我的JS文件的结构非常简陋,但请不要因为它本来就是这样而投票。
$(document).ready(function()
{
var table=null;
$('#button').click(function()
{
callfunction1();
}
callfunction1()
{
$.ajax({
'success': function(response) //response contains the plain table
{
createDatatable(response)
}
})
}
createDatatable(response)
{
$('#division').html(response); //creating the plain table
table=$('#tableId').Datatable({}); //converting it to datatable
}
//I want to add event listeners here, because if I add it anywhere else, it doesn't work, because basically its a function call.
}
我希望我得到一个解决这个面条代码的答案。
由于
答案 0 :(得分:1)
您可以在更广泛的范围内创建table
var的实例,例如:
//the table is now a window object variable window.table
var table = null;
$(document).ready(function()
{
$('#button').click(function()
{
callfunction1();
}
callfunction1()
{
$.ajax({
'success': createDatatable()
})
}
createDatatable()
{
table=$('#tableId').Datatable({})
}
//the table is binded in the window scope so you can use in your event listeners
}
答案 1 :(得分:0)
如果您选择一个var table
声明并删除其他
var table; //accessible everywhere
$(document).ready(function()
{
var table; //accessible anywhere in this function
$('#button').click(function() {
callfunction1();
}); //); were missing
function callfunction1 ()
{
$.ajax({
'success': createDatatable //no () here, you want to pass a function, not the result of a function call
});
}
function createDatatable()
{
table=$('#tableId').Datatable({});
}
}
这应该没有错误,但我不确定这是否是您想要做的。
答案 2 :(得分:0)
所以在你的所有答案(我非常感激)之后,我找到了一个不同的方法。 As per documentation here,我添加了$.ajax({}_.done()
(这与访问ajax调用之外的dataTable变量一样好)函数来托管我的事件监听器以访问我的dataTable。
再一次,我感谢大家的答案。 编辑:根据要求提供正确的解决方案。
$(document).ready(function()
{
var table=null;
$('#button').click(function()
{
callfunction1();
}
callfunction1()
{
$.ajax({
'success': function(response) //response contains the plain table
{
createDatatable(response)
}
}).done(function()
{
//add event listener here,You can access the table variable here. but you can not access the variable outside, instead just pass the variable to another function.
console.log(table);//this will work.
});
}
createDatatable(response)
{
$('#division').html(response); //creating the plain table
table=$('#tableId').Datatable({}); //converting it to datatable
}
}