#javascript #jquery #datatable
#javascript #jquery #datatable
Вопрос:
Я использую таблицы данных с jQuery для отображения некоторых данных на моем сайте. Я использую функцию поиска для фильтрации данных и даю мне ожидаемые результаты. Что я хотел бы сделать, так это скрыть таблицу до тех пор, пока пользователь не начнет вводить поиск в поле, и только тогда отображать правильные результаты. Вот мой код DataTables прямо сейчас:
function renderTable() {
jQuery('.dataTable').show();
jQuery('.dataTables_info').show();
jQuery('.dataTables_paginate').show();
}
function hideTable() {
jQuery('.dataTable').hide();
jQuery('.dataTables_info').hide();
jQuery('.dataTables_paginate').hide();
}
jQuery('.dataTables_filter input').keypress(function() {
if (jQuery('.dataTables_filter input').val() != '') {
renderTable();
} else {
hideTable();
}
});
jQuery(document).ready(function() {
jQuery('#resultsTable').DataTable({
"paging": true,
"pageLength": 25,
"lengthChange": false,
"pagingStyle": "simple_numbers",
"language": {
"search": "",
"searchPlaceholder": "Search for an entry"
},
"order": [1, 'asc']
});
hideTable();
} );
Он успешно скрывает все из таблицы данных, кроме поля поиска в document.ready, но я не могу заставить его вызывать мою функцию renderTables(), когда пользователь нажимает на поле и вводит. Я не уверен, правильно ли я ориентируюсь на нее с помощью: ‘.dataTables_filter input’. Поисковый ввод, который отображает DataTables, не имеет какого-либо уникального идентификатора, на который я мог бы настроить таргетинг, поэтому я должен ссылаться на него из элемента фильтра, который его содержит.
Ответ №1:
Попробуйте что-то вроде этого:
Создайте функцию для отображения таблицы данных с требуемым параметром фильтра и вызовите ее в функции поиска. Чтобы он не мог отображать таблицу при загрузке страницы. Когда ваша функция поиска будет запущена, она отобразит таблицу с параметром фильтра.
Пример:
$(document).ready(function(){
$('#search_box').keyup(function(){
var searchStr = $(this).val();
if((searchStr).length)
{
filterData(); // call the filter function with required parameters
}
else
{
// empty the table body
}
});
});
function filterData()
{
// your code
}
Комментарии:
1. Я обновил свой код своей последней попыткой. Я думаю, это примерно то, к чему вы клоните, но у меня возникли проблемы с тем, чтобы заставить его правильно просматривать поле ввода. Я хотел бы проверить это, когда пользователь вводит в него. Если на этом этапе в нем есть содержимое, я покажу таблицу и разбивку на страницы, если они только что удалили свой поиск или никогда его не вводили, я бы хотел, чтобы он был скрыт. Пожалуйста, дайте мне знать, что вы видите в моем новом коде неправильного. Спасибо!
2. Это сработало, когда я переместил наблюдение keyup() в свой блок document.ready. Если вы обновите свой ответ, чтобы отразить, что фрагмент keyup() должен быть в пределах проверки document.ready, я приму. Спасибо!
Ответ №2:
Вы можете использовать поле ввода отображаемого фильтра, а затем использовать функцию возврата. Вот как я это сделал.
drawCallback: function(settings){
if($('#yourtableid_filter input').val().length > 0) --this is generated by datatable
{
$('#yourtableid tr').show();
} else {
$('#yourtableid tr').hide();
}
}
как только вход фильтра опустеет, он снова скроет все.