jqGrid filterToolbar search

В попытке реализоватьfilterToolbar поиск в jquery, но когда я пишу в текстовом поле, он не отправляет значение, поле поиска или оператор: я использовал пример, вот код в HTML-файл

jQuery(document).ready(function () {
    var grid = $("#list");
    $("#list").jqGrid({
        url:'grid.php',
        datatype: 'xml',
        mtype: 'GET',
        deepempty:true ,
        colNames:['Id','Buscar','Desccripcion'],
        colModel:[
            {name:'id',index:'id', width:65, sorttype: 'int', hidden:true, search:false},
            {name:'examen',index:'nombre', width:500, align:'left', search:true},
            {name:'descripcion',index:'descripcion', width:100, sortable:false, hidden:true, search:false}
        ],
        pager: jQuery('#pager'),
        rowNum:25,
        sortname: 'nombre',
        sortorder: 'asc',
        viewrecords: true,
        gridview: true,
        height: 'auto',
        caption: 'Examenes',
        height: "100%", 
        loadComplete: function() {
            var ids = grid.jqGrid('getDataIDs');

            for (var i=0;i<ids.length;i++) {
                var id=ids[i];
                $("#"+id+ " td:eq(1)", grid[0]).tooltip({
                    content: function(response) {
                        var rowData = grid.jqGrid('getRowData',this.parentNode.id);
                        return rowData.descripcion;
                    },
                    open: function() {
                        $(this).tooltip("widget").stop(false, true).hide().slideDown("fast");
                    },
                    close: function() {
                        $(this).tooltip("widget").stop(false, true).show().slideUp("fast");
                    }
                }).tooltip("widget").addClass("ui-state-highlight");
            }
        }
    });
    $("#list").jqGrid('navGrid','#pager',{edit:false,add:false,del:false});
    $("#list").jqGrid('filterToolbar', {stringResult: true, searchOnEnter: false,
        defaultSearch: 'cn', ignoreCase: true});
});

и в файле php

$ops = array(
    'eq'=>'=', //equal
    'ne'=>'<>',//not equal
    'lt'=>'<', //less than
    'le'=>'<=',//less than or equal
    'gt'=>'>', //greater than
    'ge'=>'>=',//greater than or equal
    'bw'=>'LIKE', //begins with
    'bn'=>'NOT LIKE', //doesn't begin with
    'in'=>'LIKE', //is in
    'ni'=>'NOT LIKE', //is not in
    'ew'=>'LIKE', //ends with
    'en'=>'NOT LIKE', //doesn't end with
    'cn'=>'LIKE', // contains
    'nc'=>'NOT LIKE'  //doesn't contain
);
function getWhereClause($col, $oper, $val){
    global $ops;
    if($oper == 'bw' || $oper == 'bn') $val .= '%';
    if($oper == 'ew' || $oper == 'en' ) $val = '%'.$val;
    if($oper == 'cn' || $oper == 'nc' || $oper == 'in' || $oper == 'ni') $val = '%'.$val.'%';
    return " WHERE $col {$ops[$oper]} '$val' ";

}
$where = ""; //if there is no search request sent by jqgrid, $where should be empty
$searchField = isset($_GET['searchField']) ? $_GET['searchField'] : false;
$searchOper = isset($_GET['searchOper']) ? $_GET['searchOper']: false;
$searchString = isset($_GET['searchString']) ? $_GET['searchString'] : false;
if ($_GET['_search'] == 'true') {
    $where = getWhereClause($searchField,$searchOper,$searchString);
}   

Я видел запрос, и$searchField,$searchOper,$searchString не имеет значения

Но когда я использую кнопку поиска на панели навигации, это работает! Я не знаю, что происходит сtoolbarfilter

Благодарю вас

Ответы на вопрос(1)

Решение Вопроса

stringResult: true изtoolbarfilter, В случае, если полный фильтр будет закодирован вfilters вариант (см.Вот). Дополнительно нетignoreCase вариантtoolbarfilter метод. ЕстьignoreCase опция jqGrid, но она работает только в случаеlocal поиск.

Таким образом, вы должны изменить код сервера для использованияfilters параметр или удалитьstringResult: true вариант. УдалениеstringResult: true может быть, возможно, лучший способ в вашем случае, потому что у вас есть только один столбец с возможностью поиска. В случае, если вы получите один дополнительный параметр на стороне сервера:examen, Например, если пользователь введетphysic в единственном поле поиска параметрexamen=physic будет отправлено без какой-либо информации об операции поиска. Если вам нужно реализовать поиск по фильтру в нескольких столбцах, и если вы будете использовать разные операции поиска в разных столбцах, вам нужно будет выполнить поиск пофильтры параметр.

UPDATEDЯ хотел бы включить некоторые общие замечания в код, который вы опубликовали. Вы будете иметь плохую производительность из-за использования

$("#"+id+ " td:eq(1)", grid[0])

Проблема в том, что веб-браузер создает внутренний индекс элементов по идентификатору. Итак, код$("#"+id+ " td:eq(1)") Можно использовать идентификатор индекса и будет работать быстро. С другой стороны, если вы используетеgrid[0] в качестве контекста работы jQuery веб-браузер не сможет использовать индекс в случае и поиск соответствующего<td> Элемент будет намного медленнее в случае большого количества строк.

Чтобы написать наиболее эффективный код, вы должны напомнить, что jQuery - это оболочка DOM, которая представляет элементы страницы. JQuery предназначен для поддержкиcommon Интерфейс DOM. С другой стороны есть много полезныхspecific Метод DOM для разных элементов HTML. Например, DOM<table> элемент содержит очень полезныйстроки свойство, которое поддерживается всеми (даже очень старыми) веб-браузерами. Точно так же DOM из<tr> содержит свойствоячейки который вы можете использовать напрямую. Вы можете найти больше информации о предметеВот, В вашем случае единственное, что вам нужно знать, это то, что jqGrid создает дополнительную скрытую строку в качестве первой строки, чтобы иметь фиксированную ширину столбцов сетки. Таким образом, вы можете просто начать перечисление строк с индекса 1 (пропуская индекс 0) или проверить, является ли класс каждой строкиjqgrow, Если вы не используете подсетки или группировки, вы можете использовать следующий простой код, который эквивалентен вашему исходному коду

loadComplete: function() {
    var i, rows = this.rows, l = rows.length;

    for (i = 1; i < l; i++) { // we skip the first dummy hidden row
        $(rows[i].cells(1)).tooltip({
            content: function(response) {
                var rowData = grid.jqGrid('getRowData',this.parentNode.id);
                return rowData.descripcion;
            },
            open: function() {
                $(this).tooltip("widget").stop(false, true).hide().slideDown("fast");
            },
            close: function() {
                $(this).tooltip("widget").stop(false, true).show().slideUp("fast");
            }
        }).tooltip("widget").addClass("ui-state-highlight");
    }
}
 MarceloClaure31 мая 2012 г., 01:19
Извините, я хочу, чтобы пользователь набрал любые данные и отправил параметры в jqgrid. У меня есть только одно поле для поиска (examen), но каждый раз, когда jqgrid отправляет запрос, все параметры пусты
 MarceloClaure30 мая 2012 г., 23:18
Я новичок с этим извините, я видел запрос и каждый раз, когда я использую панель инструментов для поиска, у меня есть этот SELECT id, nombre, descripcion FROM desc_examenes WHERE & apos; & apos; ЗАКАЗАТЬ Nombre ASC Большое спасибо
 MarceloClaure30 мая 2012 г., 23:17
Благодарю вас! извините, я удалил stringResukt: true и ничего не произошло, поэтому я пытаюсь использовать фильтры, но я думаю, что я делаю ошибку, я написал [height: & quot; 100% & quot ;, _search: true, filters: {& quot; groupOp & quot;: & quot; ИЛИ & quot ;, "rules": [{"field": "examen", "op": "cn", "data": "1"}],
 31 мая 2012 г., 07:36
@ user1208491: Какие параметры jqGrid вы используете сейчас, а какие - на стороне сервера? Если вы, например, удалитеstringResult: true тогда вы должны использовать$_GET['examen'] чтобы получить данные фильтра данных, которые указывают пользователя на панели инструментов фильтра.
 30 мая 2012 г., 23:31
@ user1208491: Извините, но я не могу следовать за вами. типичноthe user введите любые данные в поле ввода на панели инструментов поиска и нажмите Enter. Поэтому jqGrid отправляет запрос на сервер с параметрами, которые описывают данные поиска. Если вы хотите запустить поиск вручную в коде, вы должны установитьsearch: true (Не_search) и установить напримерfilters как собственностьpostData опция jqGrid. более тогоfilters должен быть не объектом, а строкой JSON. Вы должны использоватьJSON.stringify преобразовать объект в строку JSON.

Ваш ответ на вопрос