Возврат каретки для текстового поля (текстовое поле)

У меня есть текстовое поле с атрибутом "wrap"="hard" (на самом деле это текстовое поле на стороне сервера, но с несколькими текстовыми режимами).

<asp:TextBox TextMode=MultiLine runat=server ID=txt Width=50 Height=50 class=txtclass />

<asp:Button runat=server ID=btnServer OnClick=btn_Click Width=80 Text="Click server" />

<input type="button" value="Click client" onclick="clientclick();" id="btnClient" style="width: 80px;" />

   protected void Page_Load(object sender, EventArgs e)
    {
        txt.Attributes.Add("wrap", "hard");
    }

Я ввожу текст, который шире текстовой области. Когда я нажимаю кнопку на стороне клиента, текст в предупреждении не возвращает каретку (например, «111111111»).

<script src="jquery-1.5.2.min.js" type="text/javascript"></script> 

<script type="text/javascript">    

function clientclick() {
        alert($('.txtclass').val());          
    }

When I click on server button while debugging I see that the text has carriage returns (like "11111\r\n1111").

protected void btn_Click(object sender, EventArgs args)
    {
        var test = txt.Text;
    }

Вопрос в том, как я могу получить текст с возвратом каретки на стороне клиента?


person Elistan    schedule 16.08.2011    source источник


Ответы (5)


Есть несколько человек, которые задавали тот же вопрос, что и вы, и общее мнение состоит в том, что простого готового решения не существует. Исправление, по-видимому, заключается в том, чтобы проходить строку по одному слову за раз и добавлять новые строки, когда она будет переноситься.

В этом случае предоставляется некоторый образец JS - разрывы строк в текстовой области с переносом слов на АРАБСКИЙ текст

person tonycoupland    schedule 16.08.2011
comment
Спасибо за ссылку. Просто интересно, почему так? Сервер в любом случае получает правильный текст со всеми возвратами каретки, возможно, он обрабатывается где-то на почте. - person Elistan; 16.08.2011
comment
Да, судя по всему, новые строки добавляются при отправке на сервер. - person tonycoupland; 16.08.2011

alert($('.txtclass').val().replace(/\r/g,"\r").replace(/\n/g,"\n"));

вы пробовали что-то подобное?

person Joseph Marikle    schedule 16.08.2011

Поскольку вы имеете дело с HTML, вы можете использовать тег '‹ BR >', чтобы принудительно разорвать строку внутри текстового поля. Я боролся с этим некоторое время и, наконец, нашел это решение. Это сработало отлично для меня.

person Mark    schedule 05.09.2013

Вот как это делается.

Читаемая версия:

S=escape(The_textarea.innerHTML);
S=S.replace(/%0D%0A/g,'<br>');
S=S.replace(/%0A/g,'<br>');
S=S.replace(/%0D/g,'<br>');
S=unescape(S);

Эффективная версия:

S=unescape(escape(The_textarea.innerHTML).replace(/%0D%0A/g,'<br>').replace(/%0A/g,'<br>').replace(/%0D/g,'<br>'));
person Jason    schedule 26.03.2015
comment
Я не использую регулярное выражение, так что это реальный вопрос, будет ли это более эффективным, поскольку replace(/%0D%0A|%0D|%0A/g,'<br>'); мне пришлось сделать что-то подобное, но не с символами %0D%0A, мне интересно, есть ли что-то странное с % для беспорядка это вверх - person BillyNair; 28.10.2015

Возвраты каретки \n\r все еще существуют, они просто не интерпретируются (превращаются в HTML).

Поэтому используйте элементы <br /> — на стороне клиента они будут интерпретироваться как HTML и отображать разрывы строк по желанию.

person cssyphus    schedule 29.11.2016