9
votes

JQGRID: Comment perdre la concentration lorsque je clique à l'extérieur de la grille ou n'importe où ailleurs.

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.

thx à l'avance


0 commentaires

6 Réponses :


0
votes

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> xxx pré>

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.


2 commentaires

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.



2
votes

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 =) xxx

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à.


0 commentaires

3
votes

Je ne sais pas exactement comment vous déclenchez l'édition inline. J'utilise le Ondblclickrow de la JQGRID et recherchait également un moyen de restaurer la ligne lorsque l'utilisateur a quitté l'entrée entrée ou sélectionnez ( modifier l'élément ).

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 de la gâchette flou de l'entrée entrée ou sélectionner Élément actuellement édité, comme ça: xxx

De cette façon, la ligne est restaurée chaque fois que l'utilisateur quitte le champ Edition sans appuyer sur Entrée.

Ceci L'approche fonctionne bien pour moi, espérons que cela aide quelqu'un d'autre aussi.


5 commentaires

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 l'événement Restorerow après la touche Entrée? Ou voulez-vous Trigger 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 "? Est-ce écraser ? Ou déclencheur ? Ou empêche de tirer ? Peut-être ajouter cela à votre colmodel est ce que vous recherchez: Editoptions: {DataEvents: [{Type: 'KeyPress', FN: Fonction (E) {if (((e) {if | E.Qui) == 13) {/ * Votre code ici * /}}}]}


Pour l'édition intégrée, l'événement OnSelectrow peut être utilisé, mais si la solution est utilisée, e est indéfini.



2
votes

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


1 commentaires

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 au lieu de la taille () <1



0
votes

im essayé peu de variantes différentes. Basé sur Code J'ai écrit le mien.

$("#mygrid").jqGrid('restoreRow',lastSel); // cancel edit


0 commentaires

1
votes

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


0 commentaires