Podczas edycji siatki, jeśli kliknę poza siatką, pole, które edytowałem, będzie nadal edytowalne. Jak zmusić edytowaną komórkę do "ukończenia" edycji, gdy traci ostrość?Slickgrid - utrata ostrości do końca edycja
Odpowiedz
Poniższy kod zapisze bieżącą zmianę.
Slick.GlobalEditorLock.commitCurrentEdit();
Musisz umieścić to wewnątrz programu obsługi zdarzeń, który Twoim zdaniem powinien wywołać zapis. Na przykład, jeśli używasz wtyczki edytora tekstu przykładowego, wierzę klasa editor-text
CSS jest dodawany do pola wprowadzania, który jest tworzony podczas edytowania komórki więc coś jak to powinno działać:
$('#myGrid').on('blur', 'input.editor-text', function() {
Slick.GlobalEditorLock.commitCurrentEdit();
});
I stwierdzono, że musiałem zawijać obsługi Clav w timeout:
$("#myGrid").on('blur', 'input.editor-text', function() {
window.setTimeout(function() {
if (Slick.GlobalEditorLock.isActive())
Slick.GlobalEditorLock.commitCurrentEdit();
});
});
aby uniknąć błędów takich jak:
Uncaught NotFoundError: An attempt was made to reference a Node in a context where it does not exist.
podczas korzystania z klawiatury do nawigacji. Prawdopodobnie nowy menedżer rozmycia zostanie uruchomiony, zanim SlickGrid będzie mógł sam sobie poradzić i to spowoduje problemy.
Niestety, prawdopodobnie z powodu różnic w przetwarzaniu zdarzeń, wersja Grame łamie nawigację po klawiaturze w chrome. Aby rozwiązać ten problem, dodałem kolejny czek tylko popełnienia zmienił, jeśli nowo koncentruje element nie jest kolejnym elementem redaktor w sieci (w wyniku nawigacji klawiatury):
$('#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();
}
});
});
To wydaje się działać w prądzie wersje firefox, chrome i ie.
Być może czegoś tutaj brakuje. Teoretycznie to działa - ponieważ jeśli dodaję go w konsoli firebug, a następnie otrzymam skupienie i utracę ostrość, działa on tylko raz. Ale w kodzie, nawet w dokumencie, już nie działa: \ – sunzyflower
Mój błąd, ten przykład rozmycia nie zadziała, ponieważ pola wejściowe są dodawane dynamicznie. Będziesz musiał powiązać zdarzenie za pomocą 'on'. Zaktualizowałem przykład, spróbuj tego. – clav
Dostaję następujący błąd: TypeError:.. JQuery (...) nie jest funkcją [Przerwa Na ten błąd] \t jQuery ('# myGrid') na ('rozmycie', „wejście .editor-text ', function() { – sunzyflower