Вы правы, в текущей реализации расширенного поиска jqGrid нет таких событий, как beforeSearch
. Новая версия расширенного поиска, которая полностью написана, будет иметь метод onSearch
, который вы могли бы использовать. Метод типа beforeSearch
будет запущен до trigger("reloadGrid",[{page:1}])
, но после заполнения postData
.
beforeSearch
из filterToolbar
имеет еще одну интересную особенность, поэтому вы можете остановить поиск, вернув значение true
из beforeSearch
. Таким образом, beforeSearch
может играть роль проверки.
В одном моем старом ответе я описал универсальный метод, который можно использовать для любого вида проверки или postData
модификации. В ответ я покажу, как можно создать подкласс обработчика событий reloadGrid
в jqGrid и остановить перезагрузку сетки, если это необходимо. Демо показывает это. Таким же образом здесь можно сделать любую другую модификацию данных. Жаль, но ответ будет очень плохо проиндексирован и не будет увлечен поиском в стеке потока. Так что никто этого не знает.
В вашем случае вам нужно только , чтобы изменить постданные перед отправкой и не нужно останавливать перезагрузку сетки. Таким образом, вы можете решить эту проблему, используя как минимум два стандартных события jqGrid: beforeRequest и serializeGridData . В обоих случаях вы можете получить доступ к параметрам search
(как this.p.search
) и postData
(как this.p.postData
). Значение параметра search
будет отправлено на сервер как _search
и будет установлено на true
, если используется какой-либо из методов поиска / фильтрации. Так что внутри одного из обработчиков событий вы можете изменить this.p.postData
.
Внутри serializeGridData у вас есть даже способ определить, какие именно данные будут отправляться на сервер без необходимости их изменения. Преимущество состоит в том, что если вы откроете диалоговое окно расширенного поиска в следующий раз, вы увидите (и сможете изменить, если необходимо) последний поисковый запрос.
Если вам нужна одинаковая реализация beforeRequest или serializeGridData на многих сетках вашего веб-сайта, вы можете установить реализацию функции по умолчанию для $.jgrid.defaults
:
$.extend($.jgrid.defaults, {
datatype: 'json', // overwrite default value of any jqGrid parameter
serializeGridData: function(postData) {
// your implementation
}
});