我正在使用Jquery插件数据表对表中的信息进行排序,但是在对表使用定制过滤器后,数据表插件消失了。
这是我的数据表的代码:
$(document).ready(function() {
$('#loans_table').DataTable( {
dom: "<'row'<'col-sm-12'l>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12'p>>",
"language": {
"paginate": {
"previous": "<",
"next": ">"
},
"lengthMenu": '<select>'+
'<option value="-1">{{ 'text.show_all'|trans }}</option>'+
'<option value="10">{{ 'text.show'|trans }} 10</option>'+
'<option value="25">{{ 'text.show'|trans }} 25</option>'+
'<option value="50">{{ 'text.show'|trans }} 50</option>'+
'</select>',
},
"iDisplayLength": -1,
"pagingType": "simple_numbers",
"order": [],
"columnDefs": [ {
"targets" : 'no-sort',
"orderable": false,
}],
"bDestroy" : true,
} );
} );
这是过滤器的代码:
$('#filter-form').on('submit', function(e) {
e.preventDefault();
var valid = true;
$(this).find('input[type=text]').each(function() {
var value = this.value;
if (value && (!$.isNumeric(value) || value < 0) ) {
$(this).parent().addClass('has-error');
console.log(value);
valid = false;
} else {
$(this).parent().removeClass('has-error');
}
});
if (valid) {
$.ajax({
type: "POST",
url: Routing.generate('app_filter'), // call ApplicationController:filterAction()
data: $(this).serialize(), // send form data
//dataType: 'json', // what data accept, html?
timeout: 60000, // how long to wait for response
success: function(response) {
$('#ajax-update').html(response); // insert response data into table
knp.init(options);
},
error: function() {
$('#match').text('Problem!'); // smth to show if error
}
});
}
});
有人遇到过类似的问题吗?
答案 0 :(得分:0)
我怀疑问题出在那儿
knp.init(options);
我现在已经知道knp是什么,或者它是init方法,我当然不知道什么是选项。(我假设options是具有数据表设置的对象文字?)无论如何,这里没有足够的信息为您的问题找到解决方案。但是,听起来您没有正确重新初始化数据表...
您将需要“破坏”原始数据表,然后清除html,然后重新初始化数据表...
请提供更多代码以获得更彻底的答案。
答案 1 :(得分:0)
通过在$('#loans_table')。DataTable({
然后通过清除,删除表并再次将其重新初始化来进行。看起来像这样:
$('#filter-form').on('submit', function(e) {
e.preventDefault();
var valid = true;
$(this).find('input[type=text]').each(function() {
var value = this.value;
if (value && (!$.isNumeric(value) || value < 0) ) {
$(this).parent().addClass('has-error');
console.log(value);
valid = false;
} else {
$(this).parent().removeClass('has-error');
}
});
if (valid) {
$.ajax({
type: "POST",
url: Routing.generate('app_filter'), // call ApplicationController:filterAction()
data: $(this).serialize(), // send form data
//dataType: 'json', // what data accept, html?
timeout: 60000, // how long to wait for response
success: function(response) {
$('#ajax-update').html(response); // insert response data into table
knp.init(options);
if (table) table.clear();
//reinitialise the dataTable
table = $('#loans_table').DataTable({
destroy: true,
dom: "<'row'<'col-sm-12'l>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12'p>>",
"language": {
"paginate": {
"previous": "<",
"next": ">"
},
"lengthMenu": '<select>'+
'<option value="-1">{{ 'text.show_all'|trans }}</option>'+
'<option value="10">{{ 'text.show'|trans }} 10</option>'+
'<option value="25">{{ 'text.show'|trans }} 25</option>'+
'<option value="50">{{ 'text.show'|trans }} 50</option>'+
'</select>',
},
"iDisplayLength": -1,
"pagingType": "simple_numbers",
"order": [],
"columnDefs": [ {
"targets" : 'no-sort',
"orderable": false,
}]
});
},
error: function() {
$('#match').text('Problem!'); // smth to show if error
}
});
}
$(this).find('[type=submit]').blur();
});