2013-08-18 11 views
11

Handsontable bietet einige nette Haken für die Auswahl einer Zelle, aber ich kann nicht herausfinden, wie ich eine Zelle in den Bearbeitungsmodus zwingen kann, wenn sie ausgewählt wurde.Wenn Sie Handsontable verwenden, um eine ausgewählte Zelle in den Bearbeitungsmodus zu versetzen?

kann ich die Zellenauswahl wie folgt ermitteln:

Handsontable.PluginHooks.add('afterSelection', function(row, column) { 
    var current_td = this.getCell(row, column); 
}); 

Und von dort kann ich auch das Zellenelement erhalten, die ausgewählt wurde. Aber von dort kann ich nicht scheinen, die Zelle in Bearbeitungsmodus auszulösen (wo es ein aktiv ausgewähltes Textfeldfeld darin hat). Dies wird normalerweise durch einen Doppelklick ausgelöst. Das Offensichtliche scheint nicht zu funktionieren:

Noch jemand anderes dies getan oder Gedanken darüber, wie ich es zur Arbeit bekommen könnte?

Antwort

6

Und ich glaube, ich habe meine eigene Frage beantwortet:

Handsontable.PluginHooks.add('afterSelectionEnd', function() { 
     f2_event = $.Event('keydown', { keyCode: 113 }); 
     this.$table.trigger(f2_event); 
}); 

, die den Trick zu tun scheint.

+0

Dank dafür! Ich musste den f2-Trigger in ein setTimeout setzen, um dies zu erreichen, weil das sofortige Abfeuern einen Fehler innerhalb von handsontable verursacht. Wenn es nach einer Verzögerung ausgelöst wird, wird es am Ende der Ereigniskette angezeigt und scheint zu funktionieren – Jason

8

Für alle Interessierten in dieser Frage gibt es jetzt eine besser programmierbare Möglichkeit, das gleiche Ergebnis zu erzielen.

this.selectCell(row, col); 
this.getActiveEditor().beginEditing(); 

Dies wählt den (row, col) Zelle und tritt in den Bearbeitungsmodus (d.h. gleiche wie Doppelklick oder Drücken von F2/Enter).

0

Edit-Modus auf Klick:

afterSelectionEnd: function (r, c, r2, c2) { 
    if (r == r2 && c == c2) { 
    getActiveEditor().beginEditing(); 
    getActiveEditor().enableFullEditMode(); 
    } 
} 

Wenn Sie enableFullEditMode hinzufügen(); Caret bewegt sich in der Zelle, während die linke oder rechte Taste gedrückt wird, anstatt zu einer anderen Zelle zu springen.

Anaother Beispiel: nur die erste Zeile:

afterSelectionEnd: function (r, c, r2, c2) { 
    if (r == r2 && c == c2) { 
    if (r == 0 && r2 == 0) { 
     getActiveEditor().beginEditing(); 
     getActiveEditor().enableFullEditMode(); 
    } 
    } 
} 
Verwandte Themen