Search jqGrid过滤器工具栏搜索

Search jqGrid过滤器工具栏搜索,search,jqgrid,Search,Jqgrid,试图在jquery中实现filterToolbar搜索,但当我在文本框中写入时,它不会发送值、搜索字段或运算符:我使用了一个示例,下面是html文件中的代码 jQuery(文档).ready(函数(){ 风险值网格=$(“#列表”); $(“#列表”).jqGrid({ url:'grid.php', 数据类型:“xml”, mtype:'获取', 是的, colNames:['Id','Buscar','Desccripcion'], colModel:[ {name:'id',index:'

试图在jquery中实现
filterToolbar
搜索,但当我在文本框中写入时,它不会发送值、搜索字段或运算符:我使用了一个示例,下面是html文件中的代码

jQuery(文档).ready(函数(){
风险值网格=$(“#列表”);
$(“#列表”).jqGrid({
url:'grid.php',
数据类型:“xml”,
mtype:'获取',
是的,
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},
{名称:'Description',索引:'Description',宽度:100,可排序:false,隐藏:true,搜索:false}
],
pager:jQuery(“#pager”),
行数:25,
sortname:‘nombre’,
排序器:“asc”,
viewrecords:是的,
gridview:没错,
高度:“自动”,
描述:“Examenes”,
高度:“100%”,
loadComplete:function(){
var id=grid.jqGrid('getdataid');
对于(变量i=0;i'=',//等于
'ne'=>'',//不相等
'lt'=>'',//大于
'ge'=>'>=',//大于或等于
'bw'=>'LIKE',//以开头
'bn'=>'不喜欢',//不以开头
'in'=>'LIKE',//在
'ni'=>'不象',//不在
'ew'=>'LIKE',//以结尾
'en'=>'不喜欢',//不以
'cn'=>'LIKE',//包含
'nc'=>'不象'//不包含
);
函数getWhere子句($col、$oper、$val){
全球$ops;
如果($oper=='bw'|$$oper=='bn')$val.='%';
如果($oper=='ew'| |$oper=='en')$val='%'。$val;
如果($oper=='cn'| |$oper=='nc'| |$oper=='in'| |$oper=='ni'),$val='%'.$val.%';
返回“WHERE$col{$ops[$oper]}'$val';
}
$where=”“;//如果jqgrid没有发送搜索请求,$where应该为空
$searchField=isset($\u GET['searchField'])?$\u GET['searchField']:false;
$searchOper=isset($\u-GET['searchOper'])?$\u-GET['searchOper']:false;
$searchString=isset($\u-GET['searchString'])?$\u-GET['searchString']:false;
如果($\u GET[''u search']=='true'){
$where=GetWhere子句($searchField、$searchOper、$searchString);
}   
我看到了这个查询,
$searchField
$searchOper
$searchString
没有值

但是当我使用导航栏上的按钮搜索时,它会工作!我不知道
工具栏过滤器发生了什么


谢谢

您使用的选项
stringResult:true
。在这种情况下,完整的筛选器将在
筛选器
选项中编码(请参阅)。此外,
toolbarfilter
方法没有
ignoreCase
选项。jqGrid有
ignoreCase
选项,但它仅在本地搜索的情况下工作

因此,您必须更改服务器代码以使用
filters
参数或删除
stringResult:true
选项。在您的情况下,删除
stringResult:true
可能是最好的方法,因为您只有一个可搜索列。在这种情况下,您将在服务器端获得一个附加参数:
examen
。例如,如果用户将在唯一搜索字段中键入
physic
,则将发送参数
examen=physic
,而不包含任何有关搜索操作的信息。如果您需要在多个列中执行筛选搜索,并且如果您将在不同的列中使用不同的搜索操作,则您必须实现按参数搜索

已更新:我想对您发布的代码添加一些一般性的注释。由于使用不当,您的性能会很差

$("#"+id+ " td:eq(1)", grid[0])
问题是web浏览器通过id在内部创建元素索引。因此代码
$(“#”+id+“td:eq(1)”)
可以使用id索引并快速工作。另一方面,如果使用
网格[0]
作为jQuery操作的上下文,web浏览器在这种情况下将无法使用索引,而在行数较多的情况下,相应的
元素的查找速度将慢得多

为了编写最有效的代码,您应该提醒,jQuery是代表页面元素的DOM的包装器。jQuery被设计为支持通用DOM接口。另一方面,对于不同的HTML元素,有许多有用的特定DOM方法。例如,
元素的DOM包含非常有用的属性ch得到所有人的支持(即使很老)web浏览器。与
的DOM包含您可以直接使用的属性的方式相同。您可以找到有关主题的更多信息。在您的情况下,您需要知道的唯一一件事是jqGrid创建额外的隐藏行作为第一行,仅具有固定的网格列宽度。因此,您可以只启动枚举在索引1中的一行上(跳过索引0),或验证每行的类是否为
jqgrow
。如果不使用子网格或分组,则可以使用与原始代码等效的以下简单代码

loadComplete:function(){
变量i,rows=this.rows,l=rows.length;
对于(i=1;i
您可以使用的选项
stringResult:true
。在这种情况下,完整过滤器将为e