Ich habe eine Funktion, die eine Datentabelle erstellt. Beim Laden der Seite wird die Datentabelle erstellt und gezeichnet. Wenn ich jetzt ein Formular einreiche, um eine Suche in einer Tabelle durchzuführen, rufe ich dieselbe Funktion auf. Zuerst mache ich eine Instanz der Datentabelle, ich rufe die Clear-Funktion auf, dann rufe ich die Funktion auf, um sie neu zu erstellen.Jquery Datatable gibt Fehler beim Neuerstellen der Datentabelle: TypeError: t [c] ist undefined
Hier ist, wie ich die Datentabelle zum ersten Mal erstellen, die ganz gut funktioniert:
$(window).load(function() {
var table = UpdateTableCompany(null, null);
.....
Hier ist die Funktion, die die Datentabelle verwaltet:
function UpdateTableCompany(val, search_field)
{
$('#tablePubDev').DataTable().clear();
var table = $('#tablePubDev').DataTable({
destroy: true,
searching: false,
"lengthMenu": [[5, 10, 15, -1], [5, 10, 15, "All"]],
"pageLength": 5,
"columnDefs": [
{
"render": function (data, type, row) {
var text = '<div class="form-group">' +
'<div class="checkbox-nice center" style="cursor: default; height:100px;">' +
'<img src="/application/assets/img/pub_devs/logos/' + row['c']['logo'] + '" style="max-height:100%; max-width: 100%;"/>' +
'</div>' +
'<div class="checkbox-nice text-center" style="cursor: default">' +
'<strong >Id: ' + pad(data, 11) + '</strong>' +
'</label>' +
'</div>' +
'</div>';
return text;
},
"targets": 0,
},
{
"render": function (data, type, row) {
var text = '<div class="form-group">' +
'<div class="checkbox-nice center" style="cursor: default; height:100px;"><p class="center" style="font-size: 150%; font-weight: bold;">' +
row['c']['descr'] +
'</p></div>' +
'</div>';
return text;
},
"targets": 1,
},
{
"render": function (data, type, row) {
var add_text1 = '';
var checked1 = '';
var add_text2 = '';
var checked2 = '';
if (data != null && data > 0) {
checked1 += 'checked="checked"';
} else
add_text1 += 'buttonDisabled ';
if (row['c']['developer'] != null && row['c']['developer'] > 0) {
checked2 += 'checked="checked"';
} else
add_text2 += 'buttonDisabled ';
var text = '<div class="form-group">' +
'<div class="checkbox-nice ' + add_text1 + '" style="cursor: default">' +
'<input type="checkbox" ' + checked1 + ' disabled="disabled" id="checkbox-1">' +
'<label for="checkbox-1">' +
'Publisher ' +
'</label>' +
'</div>' +
'<div class="checkbox-nice ' + add_text2 + '" style="cursor: default">' +
'<input type="checkbox" id="checkbox-2" ' + checked2 + ' disabled="disabled">' +
'<label for="checkbox-2">' +
'Developer' +
'</label>' +
'</div>' +
'</div>';
return text;
},
"targets": 3,
},
{
"render": function (data, type, row) {
var text = '<td style="width: 20%;">' +
//'<a href="#" class="table-link">' +
//'<span class="fa-stack">' +
//'<i class="fa fa-square fa-stack-2x"></i>' +
//'<i class="fa fa-search-plus fa-stack-1x fa-inverse"></i>' +
//'</span>' +
//'</a>' +
'<a href="#" class="table-link updatePubDev" data-modal="modal-11">' +
'<span class="fa-stack">' +
'<i class="fa fa-square fa-stack-2x"></i>' +
'<i class="fa fa-pencil fa-stack-1x fa-inverse"></i>' +
'</span>' +
'</a>' +
'<span class="fa-stack table-link danger deletePubDev">' +
'<i class="fa fa-square fa-stack-2x"></i>' +
'<i class="fa fa-trash-o fa-stack-1x fa-inverse"></i>' +
'</span>' +
'</td>';
return text;
},
"targets": 4,
}
],
"columns": [
{"data": "c.idpubdev", "name": "c.idpubdev"},
{"data": "c.descr", "name": "c.descr"},
{"data": "c.date_founded", "name": "c.date_founded"},
{"data": "c.publisher", "name": "c.publisher"},
{"data": "c.date_founded", "name": "c.date_founded"},
{"data": "c.developer", "name": "c.developer", "visible": false, "searchable": false},
{"data": "c.logo", "name": "c.logo", "visible": false, "searchable": false},
],
"order": [[0, false], [1, 'asc'], [2, 'asc'], [3, 'asc']],
"displayLength": 3,
serverSide: true,
"ajax":
{
"url": "/pubdev/search/",
"type": "POST",
"data": function (d) {
if (val)
d.val = val;
if (search_field)
d.search_field = search_field;
}
},
error: function (request, status, error) {
alert('Unable to update table contents');
console.log(request);
console.log(status);
console.log(error);
},
});
return table;
}
Hier wird stattdessen das Eintragen von das Formular, das die Suchfunktion ausführt:
$("#search_form").submit(function (e) {
e.preventDefault();
var search_key = $.trim($('#val').val());
var search_field = 'c.descr like ';
table = $('#tablePubDev').DataTable();
table.clear();
table = UpdateTableCompany(search_field, search_key);
});
Ich verwende derzeit das minimierte Format von jquery Version v1.10.2 Die Version von Datatable ist 1.10.4
Dies ist der Fehler ich in der Konsole
Ich habe versucht, ein Experiment zu bekommen: Ich habe nicht laden Sie die Datentabelle in dem Dokument bereit, so Ich habe eine Suche durchgeführt, um die Datentabelle zu laden, und es hat funktioniert! Natürlich, wenn ich eine zweite Suche mache, dann tritt derselbe Fehler auf, also hat das Problem mit der Wiederherstellung der Datentabelle zu tun. Der gesamte Back-End-Code (php) funktioniert korrekt und liefert die gewünschten Ergebnisse. Hier
ist die Tabelle in html
<div class="main-box no-header clearfix">
<div class="main-box-body clearfix">
<div class="table-responsive">
<table id="tablePubDev" class="table user-list table-hover">
<thead>
<tr>
<th>Company</th>
<th>Name</th>
<th><span>Listed Games</th>
<th>Type</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
ich versucht habe, mit der unminified Version von Datatable (v 1.10.12) und ich habe immer noch und Fehler, aber jetzt sagt, es sein:
TypeError: headerCells[i] is undefined
headerCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !==...
// Clone the table header and footer - we can't use the header/footer
// from the cloned table, since if scrolling is active, the table's
// real header and footer are contained in different table tags
tmpTable.find('thead, tfoot').remove();
tmpTable
.append($(oSettings.nTHead).clone())
.append($(oSettings.nTFoot).clone());
// Remove any assigned widths from the footer (from scrolling)
tmpTable.find('tfoot th, tfoot td').css('width', '');
// Apply custom sizing to the cloned header
**headerCells = _fnGetUniqueThs(oSettings, tmpTable.find('thead')[0]**); <-- This is where the error occurs <--
for (i=0 ; i<visibleColumns.length ; i++) {
column = columns[ visibleColumns[i] ];
headerCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?
_fnStringToCss(column.sWidthOrig) :
'';
// For scrollX we need to force the column width otherwise the
// browser will collapse it. If this width is smaller than the
// width the column requires, then it will have no effect
if (column.sWidthOrig && scrollX) {
$(headerCells[i]).append($('<div/>').css({
width: column.sWidthOrig,
margin: 0,
padding: 0,
border: 0,
height: 1
}));
}
}
// Find the widest cell for each column and put it
UPDATE:
Ich denke, ich weiß, warum das passiert, obwohl ich noch eine Lösung dafür finden muss. Es passiert einfach so, dass wenn ich meine Spalten in der Datentabelle Instanziierung definieren:
"columns": [
{"data": "c.idpubdev", "name": "c.idpubdev"},
{"data": "c.descr", "name": "c.descr"},
{"data": "c.date_founded", "name": "c.date_founded"},
{"data": "c.publisher", "name": "c.publisher"},
{"data": "c.date_founded", "name": "c.date_founded"},
{"data": "c.developer", "name": "c.developer", "visible": false, "searchable": false},
{"data": "c.logo", "name": "c.logo", "visible": false, "searchable": false},
Diese genau so viele wie die Tabellenköpfe sein müssen, die ich in meinem HTML-Seite enthalten
<thead>
<tr>
<th>Company</th>
<th>Name</th>
<th><span>Listed Games</th>
<th>Type</th>
<th>Actions</th>
</tr>
</thead>
In diesem Fall habe ich 5 Tabellenköpfen und 7 Datenspalte Definitionen (zwei haben sichtbar = falsch). Wenn ich sie in einem älteren Projekt verwendete, musste ich lediglich die "visible" -Eigenschaft auf "false" setzen, damit sie keinem Tabellenkopf zugeordnet werden, aber hier scheint es nicht zu funktionieren ... Warum? denkst du, dass das passieren würde? Ich habe einen Weg, um es zu umgehen?
Nun, ich denke, ich benutze PHP im Backend, aber ich habe das Gefühl, dass das Problem nicht mit PHP zu tun hat, aber in jquery oder Datatable Plugin – Salvo
Jeder, bitte helfen. Ich habe alles getan, was meiner Meinung nach nützlich sein könnte. – Salvo