尝试在jquery中实现filterToolbar
搜索,但是当我在文本框中写入时,它不会发送值,搜索字段或运算符:我使用了一个示例,这里是html文件中的代码< / p>
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
谢谢
答案 0 :(得分:4)
您使用toolbarfilter的stringResult: true
选项。如果完整过滤器将以filters
选项进行编码(请参阅here)。此外,ignoreCase
方法没有toolbarfilter
选项。 jqGrid有ignoreCase
个选项,但仅在本地搜索的情况下才有效。
因此,您必须更改服务器代码以使用filters
参数或删除stringResult: true
选项。删除stringResult: true
可能是您案例中最好的方法,因为您只有一个可搜索的列。如果您在服务器端获得一个额外参数:examen
。例如,如果用户在唯一的搜索字段中键入physic
,则将发送参数examen=physic
,而不会显示有关搜索操作的任何信息。如果您需要在一个列中实现过滤器搜索,并且如果要在不同的列中使用不同的搜索操作,则必须通过filters参数实现搜索。
更新:我想在您发布的代码中添加一些常规备注。由于使用
,您的性能会有不佳$("#"+id+ " td:eq(1)", grid[0])
问题是Web浏览器通过id在内部创建元素索引。因此代码$("#"+id+ " td:eq(1)")
可以使用id索引并且可以快速工作。另一方面,如果使用grid[0]
作为jQuery操作的上下文,Web浏览器将无法使用该情况下的索引,并且相应的<td>
元素的查找将会慢得多大量的行。
要编写最有效的代码,您应该提醒,jQuery是DOM的包装器,它代表页面元素。 jQuery旨在支持通用 DOM接口。另一方面,对于不同的HTML元素,有许多有用的特定 DOM方法。例如,<table>
元素的DOM包含非常有用的rows属性,所有(甚至非常旧的)Web浏览器都支持该属性。同样,<tr>
的DOM包含您可以直接使用的属性cells。您可以找到有关主题here的更多信息。在您的情况下,您唯一需要知道的是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");
}
}