J’utilise la suggestion d’ Oleg d’utiliser l’événement beforeSelectRow
pour gérer les clics sur les cellules de ma grid.
Le code d’Oleg dans sa réponse (que la mine imite exactement):
Vous pouvez définir les colonnes avec des boutons comme suit
{ name: 'add', width: 18, sortable: false, search: false, formatter:function(){ return "" }}
Dans le code ci-dessus, j’utilise un formateur personnalisé de jqGrid, mais sans aucune liaison d’événement. Le code de
- Bouton de suppression personnalisé dans jqGrid
- Existe-t-il un moyen de définir un filtre par programme dans jQuery jqgrid?
- Valeur par défaut initiale de la barre d’outils de filtre jqGrid
- jqGrid: toutes les lignes en «mode d’édition en ligne» par défaut
- Comment obtenir une valeur de cellule de ligne sélectionnée dans jqGrid
beforeSelectRow: function (rowid, e) { var iCol = $.jgrid.getCellIndex(e.target); if (iCol >= firstButtonColumnIndex) { alert("rowid="+rowid+"\nButton name: "+buttonNames[iCol]); } // prevent row selection if one click on the button return (iCol >= firstButtonColumnIndex)? false: true; }
où
firstButtonColumnIndex = 8
etbuttonNames = {8:'Add',9:'Edit',10:'Remove',11:'Details'}
. Dans votre code, vous pouvez remplacer l’alerte associée à l’appel de fonction correspondant.
Le problème est que ma grid est également sortingable (j’utilise la méthode sortableRows
sur ma grid). Si l’utilisateur déplace même légèrement la souris lorsqu’il clique sur la cellule, l’événement beforeSelectRow
n’est jamais déclenché (l’événement peut être beforeSelectRow
).
Ceci est souhaitable dans la plupart des situations. Cependant, je pense que la solution à ce problème consiste à exclure les colonnes des “poignées” afin de faire glisser (sortinger) la ligne et laisser mon événement onSelectRow
déclencher sur ces colonnes. Je n’arrive pas à comprendre comment faire ça! Toute aide est extrêmement appréciée 🙂
Vous pouvez résoudre le problème si vous ajoutez le code supplémentaire suivant.
var grid = $('#list'), tbody = $("tbody:first",grid[0]), ptr, td; grid.bind('mouseover',function(e) { var iCol = $.jgrid.getCellIndex(e.target); if (iCol >= firstButtonColumnIndex) { tbody.sortable("disable"); } else { tbody.sortable("enable"); } });
le code désactivera la fonctionnalité de sorting de jqGrid si la souris survole les boutons d’actions. Vous ne pourrez donc sortinger les lignes que dans une autre colonne.
Vous pouvez voir la démo modifiée ici .