Wenn ich beim Bearbeiten meines Rasters außerhalb des Rasters klicke, ist die Box, die ich bearbeitet habe, noch editierbar. Wie bekomme ich die bearbeitete Zelle, um die Bearbeitung abzuschließen, wenn sie den Fokus verliert?Slickgrid - Verlorener Fokus zum Beenden der Bearbeitung
Antwort
Der folgende Code speichert die aktuelle Bearbeitung.
Slick.GlobalEditorLock.commitCurrentEdit();
Sie müssen dies in einen Event-Handler einfügen, von dem Sie denken, dass er das Speichern auslösen sollte. Zum Beispiel, wenn Sie den Beispieltext Editor-Plugin verwenden, glaube ich, ein editor-text
CSS-Klasse in das Eingabefeld hinzugefügt wird, die erstellt wird, wenn Sie mit der Bearbeitung einer Zelle so etwas wie dies funktionieren sollte:
$('#myGrid').on('blur', 'input.editor-text', function() {
Slick.GlobalEditorLock.commitCurrentEdit();
});
I festgestellt, dass ich brauchte clav Handler in einem Timeout wickeln:
$("#myGrid").on('blur', 'input.editor-text', function() {
window.setTimeout(function() {
if (Slick.GlobalEditorLock.isActive())
Slick.GlobalEditorLock.commitCurrentEdit();
});
});
Fehler zu vermeiden wie:
Uncaught NotFoundError: An attempt was made to reference a Node in a context where it does not exist.
wenn mit der Tastatur zu navigieren. Vermutlich wird der neue Blur-Handler ausgelöst, bevor SlickGrid eine eigene Behandlung durchführen kann und dies Probleme verursacht.
Leider bricht die Version von Grame, wahrscheinlich aufgrund von Unterschieden in der Ereignisverarbeitung, die Tastaturnavigation in Chrom. Um dies zu beheben, habe ich erneut die Kontrolle nur das bearbeiten zu begehen, wenn die neu fokussierte Element nicht einen anderen Editor Element innerhalb des Gitters ist (als Ergebnis der Tastaturnavigation):
$('#grid').on('blur.editorFocusLost', 'input.editor-text', function() {
window.setTimeout(function() {
var focusedEditor = $("#grid :focus");
if (focusedEditor.length == 0 && Slick.GlobalEditorLock.isActive()) {
Slick.GlobalEditorLock.commitCurrentEdit();
}
});
});
Dies scheint in der aktuellen Arbeit Versionen von Firefox, Chrome und ie.
Ich könnte hier etwas fehlen. In der Theorie funktioniert das - denn wenn ich es in der Firebug-Konsole hinzufüge und dann den Fokus bekomme und den Fokus verliere, funktioniert es einmal. Aber im Code, sogar im Dokument.ready, es funktioniert nicht: \ – sunzyflower
Mein Fehler, dieses Unschärfebeispiel würde nicht funktionieren, weil die Eingabefelder dynamisch hinzugefügt werden. Sie müssen das Ereignis stattdessen mit 'on' binden. Ich habe das Beispiel aktualisiert, versuche es. – clav
ich die folgende Fehlermeldung erhalten: Typeerror:.. JQuery (...) auf keine Funktion [zu diesem Fehler Pause] \t jQuery ('# myGrid') auf ('Blur', ‚Eingabe .editor-text ', function() { – sunzyflower