Possibly a bug with oTable.$() method
Possibly a bug with oTable.$() method
MathObsessed
Posts: 7Questions: 0Answers: 0
Hello again, Allan!
I feel sorry to bother you again but it seems that I've hound a bug in your plugin. The deal is:
1) I create a DataTable instance with server-side processing.
2) I'm trying to use your new cool feature - oTable.$("selector") function inside a "fnInitComplete" function
3) I recieve a JavaScript error like "a is null" and it seems to be a jQuery function error not DataTables plugin function...
So I assume the plugin is trying to call something like $("selector", container) of a standart jQuery but there is no "container" variable because I use async request... Can you help me with this problem please? Or if I missed something can you show me a topic in documentation that describes this kind of behavior?
My initial problem is - I need to check some previously checked checkboxes inside of my table, and this table appears in a modal window with the help of an AJAX request. All was fine with previous DataTable versions, but you kinda changed the behavior of your oTable.fnGetNodes() function since then... In prev versions this function returns ALL nodes (on all pages including insivsible nodes), nowadays it returns only visible nodes! I really think that now this function does what it HAS to be done, but your new $() function doesn't seem to work as one could expect! And moreover - there seems to be no sign of handling an error or at least a documented case for this!
~Ernest Lebedev
I feel sorry to bother you again but it seems that I've hound a bug in your plugin. The deal is:
1) I create a DataTable instance with server-side processing.
2) I'm trying to use your new cool feature - oTable.$("selector") function inside a "fnInitComplete" function
3) I recieve a JavaScript error like "a is null" and it seems to be a jQuery function error not DataTables plugin function...
So I assume the plugin is trying to call something like $("selector", container) of a standart jQuery but there is no "container" variable because I use async request... Can you help me with this problem please? Or if I missed something can you show me a topic in documentation that describes this kind of behavior?
My initial problem is - I need to check some previously checked checkboxes inside of my table, and this table appears in a modal window with the help of an AJAX request. All was fine with previous DataTable versions, but you kinda changed the behavior of your oTable.fnGetNodes() function since then... In prev versions this function returns ALL nodes (on all pages including insivsible nodes), nowadays it returns only visible nodes! I really think that now this function does what it HAS to be done, but your new $() function doesn't seem to work as one could expect! And moreover - there seems to be no sign of handling an error or at least a documented case for this!
~Ernest Lebedev
This discussion has been closed.
Replies
1. You aren't using Ajax loading and thus oTable has not yet completed its initialisation and you should use this.$(...) rather than oTable.$(...)
2. You are using DataTables 1.9.0 or 1.9.1 and deferred rendering, where rows which have not yet been created are null and are passed on to jQuery which objects.
Is it one of these two? If not, can you please run your table through the debugger so I can assist without too much guess work :-)
Allan
And as I said I need ALL rows because I have like 2000-8000 rows in my tables and 50 is just have no use for me... And workarounds like, you know, switching off pagination or switch to option "all" in pagination select wont work because they take vast amounts of time to only render 8000 rows in browser!
For now I'm trying to use some REALLY ugly workarounds like:
$.each(oTable._fnGetDataMaster(), function(index, rowElement){
var firstCell = ""+rowElement[0]+"",
cellCheckboxName = $(firstCell).find(":checkbox").attr("name"),
tempVar;
if ($.inArray(cellCheckboxName, curSelected) !== -1) {
tempVar = $(""+oTable.DataTable.settings[1].aoData[index]._aData[0]+"");
tempVar.find(":checkbox").attr("checked", "checked");
oTable.DataTable.settings[1].aoData[index]._aData[0] = tempVar.html();
}
});
But it is also slow of course as you can see... I use lines of code like this: ""+rowElement[0]+"" so I can use jQuery selectors after instead of regular expressions and shouldn't be bothered with any HTML changes in the future...
~Ernest Lebedev
@param {string} [oOpts.page=all] Limit the selection to the currently displayed page
* ("current") or not ("all"). If 'current' is given, then order is assumed to be
* 'current' and filter is 'applied', regardless of what they might be given as.
But with no results :(
I tried:
console.log(oTable.$(":checkbox").length); //returns 50
console.log(oTable.$(":checkbox", {"page": "all"}).length); //returns 50
You are using deferred rendering. The whole point of deferred rendering is that the TR nodes don't get created on first draw. If you want to access them, you need to allow them to be created by removing deferred rendering.
Allan
This finally returned me all 3500 rows that needed :)