2017-01-27 7 views
1

У меня есть jqGrid с панелью инструментов фильтра. Фильтрация работает. Но когда я набираю «N» в столбце поиска первого имени, он перечисляет записи, в которых нет «N». Это показано на скриншоте ниже. Как мы можем это исправить?Панель инструментов jqGrid Filter отображает записи, которые не имеют ключа поиска

Fiddle

enter image description here

КОД

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Test</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    <link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/themes/start/jquery-ui.css" rel="stylesheet" /> 
    <link href="https://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/css/ui.jqgrid.css" rel="stylesheet" /> 
    <script src="https://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/js/jquery.jqGrid.min.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/js/i18n/grid.locale-en.js"></script> 



    <script type="text/javascript"> 
    //<![CDATA[ 
     $(document).ready(function() { 
      var myData = [ 

       { "id": "35", "firstname": null, "codeval": "G", "note": "xx7866", "amount": "23" }, 
       { "id": "73", "firstname": null, "codeval": "W", "note": "dd1047", "amount": "34" }, 
       { "id": "75", "firstname": "LORA", "codeval": "H", "note": "rr7323", "amount": "56" }, 
       { "id": "95", "firstname": "EST", "codeval": "M", "note": "gg574", "amount": "55" } 
       ], 

       myGrid = $("#list"); 

      myGrid.jqGrid({ 
       datatype:'local', 
       data: myData, 
       colNames: ['ID', 'FirstName', 'Code', 'Amount', 'Note'], 
       colModel:[ 
        {name:'id',index:'id',width:70,align:'center',sorttype: 'int'}, 
        {name:'firstname',index:'firstname',width:80, align:'center'}, 
        { name: 'codeval', index: 'codeval', width: 70 }, 
        {name:'amount',index:'amount',width:100, formatter:'number', align:'right'}, 
        {name:'note',index:'note',width:100,sortable:false} 
       ], 
       rowNum:10, 
       pager: '#pager', 
       gridview:true, 
       ignoreCase:true, 
       rownumbers:true, 
       viewrecords: true, 
       sortorder: 'desc', 
       height: '100%' 
      }); 
      myGrid.jqGrid('filterToolbar', { stringResult: true, searchOnEnter: false, defaultSearch: "cn" }); 

     }); 
    //]]> 
    </script> 
</head> 
<body> 
    <table id="list"><tr><td/></tr></table> 
    <div id="pager"></div> 

</body> 
</html> 

ответ

1

Вы описали ошибку в jqGrid 4.6.

The line

phrase.push("String("+s+")"); 

из jqGrid кода должен быть установлен, например, к следующему

phrase.push("String(" + s + " || '')"); 

Основная проблема: вы используете мертвую версию jqGrid: 4,6, что составляет около 3 лет. В настоящее время существуют две основные вилки jqGrid: коммерческие Guriddo jqGrid JS и альтернативные вилки free jqGrid, которые я разрабатываю.

Если бы использовать текущую версию бесплатно jqGrid (версия 4.13.6), то я мог бы предложить вам использовать jsonmap в качестве обходного

{ name: 'firstname', width: 80, align: 'center', 
    jsonmap: function (item) { 
     return item.firstname != null ? item.firstname : ""; 
    } } 

Смотреть демо: https://jsfiddle.net/OlegKi/rqab1veh/1/

Из причина, я исправил ошибку в последнем коде бесплатного jqGrid (см. the commit). Вы можете скачать исправленный cde от GitHub. Вы можете проверить на демо https://jsfiddle.net/OlegKi/rqab1veh/3/, что у вашего кода нет проблем в случае использования последнего кода бесплатного jqGrid от GitHub.

Я не вижу обходной проблемы, о которой вы сообщили, в jqGrid 4.6. Я могу предложить вам либо перейти на последний код бесплатного jqGrid, либо создать собственную сборку jqGrid 4.6 с исправлением ошибок, о котором я говорил ранее.