2015-05-06 22 views
5

Ich versuche, eine Textarea zu implementieren, die in React automatisch nahe Parens einfügt, aber wenn ich die Value-Eigenschaft des Textarea ändern, springt der Cursor an das Ende des zu bearbeitenden Textes.Wie kann man die Cursorposition bei textarea text change beibehalten?

Hier ist meine onChange Funktion:

//on change 
    function(event) { 

     var newText = event.target.value 

     var cursorPosition = getCursorPosition(event.target) 
     if(lastCharacterWasParen(newText, cursorPosition)){ 
      newText = newText.slice(0, cursorPosition) + ')' + newText.slice(cursorPosition) 
     } 

     this.setProps({text: newText}}) 

    } 

Diese erfolgreich die paren einfügt, aber wie kann ich die Cursor-Position bewahren?

Antwort

2

Ich mache ähnliche Dinge schon einmal.

Der Weg, um die Cursorposition ändern verwendet: evt.target.selectionEnd

In Ihrem Fall können Sie die selectionEnd vor dem Einsetzen und nach dem Einlegen, stellen Sie die selectionEnd auf die Position sollte es sein, notieren nach unten.

+0

'selectionStart' und' selectionEnd' ist auf jeden Fall Weg zu gehen , aber Sie müssen sicher sein, dass es keine benutzerdefinierte Auswahl im Textfeld gibt. – borisano

+0

@borisano yup, du hast recht, ich denke nur daran. Wenn nach der Operation nichts ausgewählt werden soll, setzen Sie selectionStart = selectionEnd. Wenn Sie etwas auswählen möchten, das von dem Paren umgeben ist, ändern Sie es entsprechend. Und auch, nicht sicher, was passiert, wenn selectionStart> selectionEnd ... – Surely

1

Sie können selectionStart prop wie here zum Speichern und dann Cursorposition zurückgesetzt

var cursorPosition = $('#myTextarea').prop("selectionStart"); 

Dann etwas wie this verwendet Cursorposition zu setzen

Verwandte Themen