2009-12-14 8 views
4

J'ai un JQGrid qui a déjà été initialisé. Comment puis-je ajouter un gestionnaire d'événements? J'ai essayéComment ajouter par programme un gestionnaire d'événements sur un JQGrid?

grid.setGridParam({ 
    onSelectRow: function(rowid, status) { 
     alert("onSelectRow"); 
    } 
}); 

mais cela ne fait rien (pas d'erreur, mais pas d'alerte sur sélectionner non plus).


Mise à jour

Transforme le code ci-dessus fonctionne réellement bien - même si comme le souligne @jitter la nouvelle syntaxe de l'API est préférée. Mon problème était que grid faisait référence au mauvais objet. Pour une raison quelconque dans le gestionnaire d'événements gridComplete, $(this) ne renvoie pas une référence à la grille, mais $("#" + this.id) fait.

// handles the gridComplete event 
gridInitialized = function() { 
    var grid = $("#" + this.id); 
    grid.jqGrid("setGridParam", { onSelectRow: selectRow }); 
}; 
+0

Un commentaire à ma réponse? Ne fait-il pas ce que tu veux? – jitter

+0

Une réflexion sur pourquoi '$ (this)' et '$ (" # "+ this.id)' sont différents? Existe-t-il une meilleure façon "standard" d'obtenir une référence à la grille dans l'événement 'gridComplete'? –

Répondre

9

La méthode correcte pour cela (+ en utilisant la nouvelle syntaxe de l'API) est la suivante. N'a pas besoin d'un

grid.jqGrid("setGridParam", { 
    onSelectRow: function(rowid, status) { 
     alert("onSelectRow"); 
    } 
}); 
+0

Merci d'avoir souligné la syntaxe améliorée - en fait, il s'avère que mon code ci-dessus était correct, mais la variable 'grid' que j'utilisais faisait référence à la mauvaise chose. –

1

Il suffit d'ajouter un déclencheur pour recharger la grille, comme ceci:

grid.setGridParam({ 
    onSelectRow: function(rowid, status) { 
     alert("onSelectRow"); 
    } 
}).trigger("reloadGrid"); 

Selon le doc de, il faut recharger la grille, mais il ne » se produire pour moi si je crée la grille, et un peu plus tard ajouter cette fonction.

Si je mets ce code dans un gestionnaire onclick pour un lien, il déclenche un rechargement de la grille.

+0

Merci - il semble que 'trigger (" reloadGrid ")' n'est en fait pas nécessaire - voir ma mise à jour ci-dessus. Aussi, si vous mettez ceci dans le gestionnaire 'gridComplete' - ce qui est l'endroit où je le fais - cela vous enverra dans une boucle sans fin. –

Questions connexes