2016-07-09 5 views
0

Я использую Datatables (https://datatables.net) на своем сайте и хотел бы переопределить функцию поиска по умолчанию с помощью метода levenstein.Функция переопределения Datatables по умолчанию

У меня уже есть метод levenstein на месте, но у меня возникают проблемы с захватом значения окна поиска, чтобы проверить его. В поле поиска, которое добавляются Datatables, нет идентификатора или имени или чего-либо еще, что я могу легко использовать для таргетинга на этот элемент.

я могу думать о 2 способа решения этой:

  1. Выяснить, как получить значение окна поиска (пользовательский типизированных значение)
  2. Выяснить, как скрыть окно поиска без отключения в целом, и добавить свой собственный пользовательский ввод.

Вот что у меня есть.

$.fn.dataTable.ext.search.push(
    function(settings, data, dataIndex) { 
     var search = /* this should be the search box value */; 
     var title = data[1]; 

     return (title.toLowerCase().levenstein(search.toLowerCase()) < title.length) ? true : false; 
    } 
); 

Помогите мне с одним из перечисленных выше вариантов.

спасибо.

+0

вы не можете afaik; в поле поиска используется только API таблиц данных. ну, на самом деле, вы могли бы скрыть метод поиска, но dt-made gui будет работать только с API, это главное, о чем нужно помнить. – dandavis

ответ

1

не имеет идентификатор или имя или что-нибудь еще

Ну, да, это действительно есть. Это работает для меня:

$('#myTable_filter input').on('keypress', function(e) { 
    e.preventDefault(); 
    alert(e.which); 
}); 

Просто зайдите в поле поиска и проверьте его (если вы не знаете, как это сделать в Chrome, просто щелкните правой кнопкой мыши на любом элементе и выберите Проверить), и вы можете увидеть как это работает для вас самих. DataTables применяет идентификатор (имя вашей таблицы с привязкой _filter) к div, который упаковывает поле ввода, и это единственное поле ввода в div. Таким образом, этот селектор работает. Вы также захотите сделать preventDefault, чтобы поиск по DataTables не запускался после нажатия клавиши.

+0

Спасибо, я попробую это, когда вернусь домой. Я смог скрыть окно поиска, скрыв #table_filter. Теперь это просто заставить мой поиск работать должным образом. Кажется, что мой поиск работает ПОСЛЕ поиска по умолчанию, поэтому не уверен, как остановить их работу. Я попробую preventDefault(), когда вернусь домой, но не уверен, что это сработает, потому что мой, кажется, после их. –

+0

Возможно, вы правы. Когда вы делаете preventDefault, он останавливает нажатие клавиши. Если вы заполните окно поиска программно после применения своей собственной процедуры поиска, это может привести к повторному событию нажатия клавиши ... – BobRodes

+0

Также посмотрите [событие поиска DataTables] (https://datatables.net/reference/event/search), который запускается перед перерисованием таблицы, но после применения критериев поиска к базовым данным. В этом случае вы, вероятно, можете предотвратить по умолчанию, отменить ключ, который применял поиск, применить свой собственный поиск и перерисовать таблицу. Вы также можете предотвратить дрожание ввода символа в поле поиска дважды, захватив символ нажатием клавиши и предотвращая его. – BobRodes

Смежные вопросы