jqGrid filterToolbar de recherche
En essayant de mettre en place un filterToolbar
de recherche en jquery, mais quand j'écris dans la zone de texte il ne marche pas envoyer la valeur, le champ de recherche, ni l'opérateur: j'ai utilisé un exemple, voici le code dans le fichier 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});
});
et dans le fichier 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);
}
J'ai vu la requête, et $searchField
,$searchOper
,$searchString
n'ont aucune valeur
Mais lorsque j'utilise le bouton de recherche dans la barre de navigation, il fonctionne! Je n'ai pas de connaître ce qui se passe avec le toolbarfilter
Merci
Vous devez vous connecter pour publier un commentaire.
Vous utilisez l'option
stringResult: true
de la toolbarfilter. Dans le cas de la pleine de filtre seront encodés dansfilters
option (voir ici). En outre, il n'y a pasignoreCase
option detoolbarfilter
méthode. Il y aignoreCase
option de jqGrid, mais il ne fonctionne que dans le cas de local la recherche.Vous devez donc modifier le code de serveur à utiliser
filters
paramètre ou de supprimerstringResult: true
option. Le retrait destringResult: true
pourrait être probablement la meilleure façon dans votre cas parce que vous avez un seul consultable colonne. Dans le cas, vous obtiendrez un paramètre supplémentaire sur le côté serveur:examen
. Par exemple, si l'utilisateur typephysic
dans le seul champ de recherche le paramètreexamen=physic
sera envoyer sans de toutes les informations au sujet de la recherche effectuée. Si vous avez besoin de mettre en œuvre le filtre de recherche dans plus de la colonne et, si vous utilisez différents opération de recherche dans les différentes colonnes, vous aurez à mettre en œuvre la recherche par les filtres paramètre.Mis à JOUR: je voulais inclure quelques remarques générales pour le code que vous avez posté. Vous aurez de mauvaises performances en raison de l'utilisation
Le problème est que le navigateur web de créer à l'interne de l'index des éléments d'identification. Donc le code
$("#"+id+ " td:eq(1)")
pouvez utiliser l'id d'index et de travailler rapidement. De l'autre côté si vous utilisezgrid[0]
que dans le contexte de jQuery fonctionnement du navigateur web sera impossible d'utiliser l'index dans le cas de la constatation de l'correspondant<td>
élément sera beaucoup plus lentement dans le cas d'un grand nombre de lignes.D'écrire le plus efficace de code, vous devez rappeler, que jQuery est le wrapper du DOM qui représentent les éléments de la page. jQuery est conçu pour soutenir commune interface DOM. De l'autre côté il y a beaucoup de utile spécifiques méthode DOM pour les différents éléments HTML. Par exemple DOM de la
<table>
élément contiennent très utile les lignes propriété qui est pris en charge par tous (même les plus anciens) des navigateurs web. De la même façon DOM de<tr>
contient propriété les cellules que vous pouvez utiliser directement. Vous pouvez trouver plus d'informations sur le sujet ici. Dans votre cas, la seule chose que vous devez savoir, c'est que jqGrid créer d'autres cachés ligne comme la première ligne uniquement, fixa la largeur des colonnes de la grille. Ainsi, vous pouvez juste commencer l'énumération des lignes à partir de l'indice 1 (le saut de l'index 0) ou de vérifier si la classe de chaque ligne estjqgrow
. Si vous n'utilisez pas subgrids ou de regroupement, vous pouvez utiliser le code simple suivant, qui est l'équivalent de votre code d'originesearch: true
(Pas_search
) et de définir par exemplefilters
la propriété depostData
option de jqGrid. En outrefilters
doit pas être l'objet, mais de chaîne JSON. Vous devez utiliserJSON.stringify
pour convertir un objet en JSON chaîne.stringResult: true
alors vous devriez utiliser$_GET['examen']
pour obtenir les données de filtrer les données qui indiquent à l'utilisateur dans la barre d'outils filtre.