JQGrid: ‘beforeSelectRow’ et ‘sortableRows’ – exclut la colonne d’être déplaçable?

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

 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; } 

firstButtonColumnIndex = 8 et buttonNames = {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 .