2015-05-06 14 views
5

React'a yakın parantezleri otomatik olarak ekleyen bir textarea uygulamaya çalışıyorum, ancak textarea'nın değer özelliğini değiştirdiğimde, imleç düzenlenmekte olan metnin sonuna atlar.Textarea metin değiştirmede imleç konumu nasıl korunur?

İşte benim onChange fonksiyonu var:

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

    } 

Bu başarıyla paren ekler ama nasıl imleç konumunu korumak mı?

cevap

2

Daha önce benzer şeyler yapıyorum.

imleç konumunu değiştirmek için bir yol kullanıyor: Senin durumunda evt.target.selectionEnd

, sen takmadan önce selectionEnd aşağı kaydedebilir ve taktıktan sonra, olması gerektiği pozisyona selectionEnd ayarlayın.

+0

'selectionStart' ve' selectionEnd' kesinlikle gitmek için yoludur ama textarea'da özel seçim olmadığından emin olmalısın. – borisano

+0

@borisano yup, haklısın, sadece düşünüyorum. İşlemden sonra hiçbir şey seçilmemesi gerekiyorsa, selectionStart = selectionEnd seçimini yapın. Paren ile çevrili bir şey seçmek istiyorsanız, buna göre değiştirin. Ve ayrıca, selectionStart> selectionEnd ise ... ... ne olacağından emin değilsiniz. – Surely

1

imleç pozisyonunu saklamak ve daha sonra sıfırlamak için tarif here olarak selectionStart pervane kullanabilirsiniz

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

Sonra imleç konumunu ayarlamak için this gibi bir şey kullanmak