2017-01-27 71 views
1

我有以下带有过滤器工具栏的jqGrid。过滤正在工作。但是当我在第一个名字搜索列中输入“N”时,它会列出没有“N”的记录。这在下面的屏幕截图中显示。我们如何解决这个问题?jqGrid过滤器工具栏显示没有搜索键的记录

Fiddle

enter image description here

CODE

<!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)。您可以从GitHub下载固定的cde。您可以在演示https://jsfiddle.net/OlegKi/rqab1veh/3/上验证您的代码在使用来自GitHub的免费jqGrid的最新代码的情况下没有问题。

我在jqGrid 4.6中看不到任何问题的解决方法,您所报告的问题。我可以建议你升级到免费的jqGrid的最新代码,或者使用我之前描述的错误修复来定制jqGrid 4.6。

相关问题