2016-04-05 2 views
1

Таким образом, можно добавить текст в текстовое поле с помощью этого методаУстановить значение в текстовом поле требуемой линии

document.getElementById('myArea').value += msg; 

Это Tacks нового входа на конец текущего входа.

Предположим, что в textarea уже содержится текст. Предположим также, что использование «=» вместо «+ =» и ввода значений textarea, которые уже имели вместе с новыми, не является возможным решением в этом контексте

Как бы вставить новый текст в это текстовое поле на правильной строке и в правильном положении относительно текста, который уже существует?

Вот видео YouTube, демонстрирующий проблему

https://www.youtube.com/watch?v=GpwEuI3_73I&feature=youtu.be

UPDATE: Вместо отправки одного письма в то время, я послал в целом TEXTAREA каждый раз при нажатии клавиши. Очевидно, что больше вычислительного налогообложения, но это единственное решение, которое я имею прямо сейчас. Я все еще заинтересован в том, чтобы слышать любые лучшие решения, если у вас их есть!

+0

Зачем использовать = невозможно? Я не могу представить этот сценарий ... –

+0

Вы говорите о позиции курсора? – Rayon

+0

@AntonHarald Я использую socket.io для отправки по одной букве за раз в режиме реального времени по мере ее ввода. Чтобы использовать «=», я должен был бы отправить всю страницу каждый раз, когда будет напечатано письмо. Неэффективность была бы просто смешной. – PencilCrate

ответ

-2

Привет это добавить текст в существующий текст в текстовое поле я попробовать что

var msg = "Hi How are you ?"; 
    document.getElementById('myArea').value += msg; 
+3

это именно то, что предлагает и хочет избежать ОП. –

+0

Я просто пытаюсь помочь ... –

0

Я предполагаю, что вы посылаете только последний набранный символ (как в оригинальном подходе), и она хранится в переменная с именем «newChar».

Возьмите это как псевдо-код, хотя я надеюсь, что он не требует много изменений на самом деле работают:

// deserialize the text of the target textearea 
var txt = targetTextarea.text; 
var txtAsArray = txt.split(/\r?\n/); 
var txtLine = txtAsArray[cursorRowNum]; 

// write the new character in the right position (but in memory) 
txtLine = txtLine.substr(0, cursorColNum) + newChar + txtLine.substr(cursorColNum); 

// now serialize the text back and update the target textarea 
txtAsArray[cursorRowNum] = txtLine; 
txt = txtAsArray.join("\n"); 
targetTextarea.text = txt; 

Ссылка была использована: How in node to split string by newline ('\n')?

Что касается производительности, нет никакой дополнительной сетевой активности здесь, и мы обращаемся к DOM только дважды (первая и последняя строка). Помните, что доступ к DOM примерно в 100 раз медленнее, чем обычные переменные в памяти, как показано http://www.phpied.com/dom-access-optimization/.

Это "txt = txtAsArray.join (" \ n ");" может потребоваться «txt = txtAsArray.join (« \ r \ n »); в Windows. Обнаружение, если вы находитесь в том или ином, объясняется на How to find the operating system version using JavaScript, как указано Angel Joseph Piscola.

+0

Что произойдет, если пользователь удалит текст из текстового поля или добавит новую строку, скопирует и пропустит-что-нибудь? –

+0

[Как найти операционную систему с помощью javascript] (http://stackoverflow.com/questions/9514179/how-to-find-the-operating-system-version-using-javascript) –

+0

@AntonHarald Я сомневаюсь, что он работает в эти случаи без дальнейших улучшений. Здесь я просто отвечаю на вопрос автора, как указано на https://www.youtube.com/watch?v=GpwEuI3_73I#t=0m44s –

Смежные вопросы