Je fais actuellement l'édition en utilisant l'édition en ligne, et lorsque je clique en dehors de la grille, il est toujours sous la modification. Quels gestionnaires d'événements dois-je utiliser pour pouvoir appeler la fonction Restaurer la ligne, de sorte que le seul moyen pour que les données soient réellement envoyées au serveur soit si l'utilisateur appuie sur Entrée. P>
thx à l'avance p>
6 Réponses :
Même si je suis confronté au même problème tout en travaillant avec l'édition inine.Je suis parti pour une solution de contexte.Je ne sais toujours pas encore si c'est une solution correcte.
Quand j'étais édité une rangée. trier p> Lorsque je voulais envoyer les données au serveur pour mettre à jour, j'utilise l'instruction suivante dans ma première ligne et envoyez ensuite les données au serveur. P> $(gridId).saveRow(lastSel);//where lastSel is the global variable I have selected.
Euh, j'ai bien compris ce que tu veux dire. Je peux déjà faire l'édition en ligne. Ce que je veux faire, c'est que lorsque je clique à l'extérieur de la grille, il appellera la fonction de restauration de restauration.
ya je sais que vous faisiez l'édition en ligne. La chose ici est que, au lieu de capturer l'événement de flou, essayez de sauvegarder la ligne que vous avez sélectionnée pour l'édition.Selon le code que j'ai écrit à tout moment où j'ai une identification de ligne que a été ouvert à l'édition.My suggestion ici est qu'avant d'effectuer d'autres opérations liées à la grille, enregistrez la ligne que vous avez ouverte pour l'édition et aller de l'avant avec vos autres opérations.btw J'ai utilisé Saverow () pour mes besoins que vous pouvez utiliser Restorerow () Pour votre condition requise.
Quoi qu'il en soit, j'ai compris comment le faire déjà. Juste pensé pourrait être bon de le laisser quelque part en ligne alors que je gaspillais un peu de temps à comprendre comment le faire. J'espère que cela aide =) Ajoutez simplement cette pièce de code quelque part et modifiez les pièces appropriées, telles que le nom de terrain et SleeSelectortroot et #grid à ce que vous utilisez déjà. P> p>
Je ne sais pas exactement comment vous déclenchez l'édition inline. J'utilise le Je trouve que c'est encombrant de garder une trace du dernier élément sélectionné et de le vérifier à chaque clic sur d'autres éléments. Donc, je pense qu'un moyen plus pratique consiste à joindre le «code> restorerow code> de la gâchette code> flou code> de l'entrée code> entrée code> ou De cette façon, la ligne est restaurée chaque fois que l'utilisateur quitte le champ Edition sans appuyer sur Entrée. P> Ceci L'approche fonctionne bien pour moi, espérons que cela aide quelqu'un d'autre aussi. P> p> Ondblclickrow CODE> de la JQGRID et recherchait également un moyen de restaurer la ligne lorsque l'utilisateur a quitté l'entrée
entrée code> ou
sélectionnez code> ( modifier l'élément em>).
sélectionner code > Élément actuellement édité, comme ça: p>
N'importe quelle idée comment capturer l'événement Restore Row sur Entrer Touche Appuyez sur.
@HARDIKMISHRA Je ne comprends pas tout à fait la question. Voulez-vous Intercept i> l'événement Restorerow après la touche Entrée? Ou voulez-vous Trigger i> l'événement Restorerow sur Entrée KeyPress?
Je souhaite enregistrer les données modifiées sur la touche Entrer. Mais je n'utilise pas 'Saverow'. Donc, en fait, j'ai besoin de capturer le rappel de "Editrow"
@HARDIKMISHRA Que voulez-vous dire par " capture i>"? Est-ce écraser i>? Ou déclencheur i>? Ou empêche de tirer i>? Peut-être ajouter cela à votre colmodel code> est ce que vous recherchez:
Editoptions: {DataEvents: [{Type: 'KeyPress', FN: Fonction (E) {if (((e) {if | E.Qui) == 13) {/ * Votre code ici * /}}}]} code>
Pour l'édition intégrée, l'événement OnSelectrow peut être utilisé, mais si la solution est utilisée, e est indéfini.
Étant donné que le problème principal est que vous souhaitez perdre la mise au point lorsque vous cliquez sur la grille, j'ai écrit cette fonction pour désélectionner la cellule uniquement lorsque la grille n'a pas () l'élément cliqué:
$(document).click(function(e) { e.preventDefault(); //gets the element where the click event happened var clickedElement = e.target; //if the click event happened outside the grid if($("#myGridId").has(clickedElement).size() < 1){ //unselect the grid row $("#myGridId").jqGrid("editCell", 0, 0, false); } });
La taille () est désormais amortie et non disponible dans les versions récentes, utilisez la longueur. se référer . Utilisez également longueur == 0 code> au lieu de la taille
() <1 code>
im essayé peu de variantes différentes. Basé sur Code J'ai écrit le mien.
$("#mygrid").jqGrid('restoreRow',lastSel); // cancel edit
Cette solution fonctionne pour moi et a l'air plus simple que les autres options. Est générique et n'a pas besoin de variable globale.
$(document).on('focusout', '[role="gridcell"] *', function() { $("#mygrid").jqGrid('editCell', 0, 0, false); });