Существует как минимум три способа использования поиска: Поиск по панели инструментов , Выборочный поиск , который вы используете, и Поиск по одному полю или Расширенный поиск с одинаковым кодом.Таким образом, в настоящее время имеется три различных реализации близких вещей.
Только Поиск по панели инструментов имеет обработчик beforeSearch
, который может возвращать false
, чтобы остановить поиск.В случае Пользовательский поиск значение, возвращаемое обработчиком события beforeSearch
, не будет использоваться . Поиск по одному полю или Расширенный поиск не вызывать обработчик событий перед поиском.Во всех случаях для поиска установите поисковый фильтр и параметр jqGrid search
в true
, а затем принудительно перезагрузите сетку с кодом, подобным
$("#gridId").trigger("reloadGrid",[{page:1}]);
, чтобы иметь возможность выполнить любые проверки и остановить перезагрузкуСетка не вижу простого пути.Поэтому я предлагаю только следующее.
Вы можете переписать стандартный reloadGrid
обработчик событий и chain it.Соответствующий код выглядит следующим образом:
var grid = $("#gridId");
var events = grid.data("events"); // read all events bound to
var originalReloadGrid; // here we will save the original event handle
var skipRefresh = false; // this can be changed by owe validation function
// Verify that one reloadGrid event hanler is set. It is typical sitation
if (events && events.reloadGrid && events.reloadGrid.length === 1) {
originalReloadGrid = events.reloadGrid[0].handler; // save old
grid.unbind('reloadGrid');
var newEvents = grid.data("events");
grid.bind('reloadGrid', function(e,opts) {
if (!skipRefresh && grid[0].p.search) {
originalReloadGrid(e,opts);
}
});
}
Возможно, позже я создам демо-версию, демонстрирующую это на примере, и разместу здесь ссылку на демоверсию.Более того, я постараюсь предложить изменения кода в jqGrid так, чтобы во всех различных реализациях поиска было возможно остановить поиск, возвращая false
по beforeSearch
дескриптору события.
UPDATED : ХОРОШО!Я подготовил демо для вас.В демоверсии я не использую серверные компоненты, поэтому он не будет выполнять поиск, но вы можете увидеть результаты, если сетка будет обновлена и перейдет на страницу 1.
Для проверки демо Вы можете сделать следующее:
- введите в поле ввода «Клиент» текст, не начинающийся с «тест», и нажмите кнопку «Поиск».Вы получите предупреждение, имитирующее диалог проверки.
- введите в поле ввода «Клиент» текст, начинающийся с «test», например
test1
, и нажмите кнопку «Поиск».Теперь григ будет обновлен, потому что проверка будет в порядке.